1. Go to this page and download the library: Download xalaida/pdo-mock library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
xalaida / pdo-mock example snippets
use PDO;
class BookService
{
private PDO $pdo;
public function __construct(PDO $pdo)
{
$this->pdo = $pdo;
}
public function findById(int $id): array
{
$statement = $this->pdo->prepare('SELECT * FROM "books" WHERE "id" = :id');
$statement->bindValue('id', $id);
$statement->execute();
return $statement->fetch(PDO::FETCH_ASSOC);
}
}
use PHPUnit\Framework\Attributes\Test;
class BookServiceTest
{
#[Test]
public function itShouldFindBookById(): void
{
$pdo = new PDOMock();
$pdo->expect('SELECT * FROM "books" WHERE "id" = :id')
->with(['id' => 7])
->willFetch([
['id' => 7, 'title' => 'The Forest Song']
]);
$bookService = new BookService($pdo);
$book = $bookService->findById(7);
static::assertEquals(7, $book['id']);
static::assertEquals('The Forest Song', $book['title']);
}
}
use Xalaida\PDOMock\PDOMock;
$pdo = new PDOMock();
$pdo->expect('SELECT * FROM "books"');
$pdo->expect('SELECT * FROM "books" LIMIT 1')
->toMatchRegex();
$pdo->expect('SELECT * FROM "books" LIMIT 1')
->toBePrepared();
$pdo->expect('SELECT * FROM "books" WHERE "id" = :id')
->with(['id' => 7]);
$pdo->expect('SELECT * FROM "books" WHERE "year" = ? AND "status" = ?')
->with([2020, 'published']);
$pdo->expect('SELECT * FROM "books" WHERE "id" = :id')
->with(['id' => 7], ['id' => PDO::PARAM_INT]);
$pdo->expect('SELECT * FROM "books" WHERE "id" = :id')
->with(['id' => 7])
->toMatchParamsLoosely();
$pdo->expect('SELECT * FROM "books" WHERE "id" = :id')
->with(['id' => 7])
->toMatchParamsNaturally();
$pdo->expect('SELECT * FROM "books" WHERE "id" = ?')
->with(function (array $params, array $types) {
static::assertSame(7, $params[1]);
static::assertSame(PDO::PARAM_INT, $types[1]);
});
$pdo->expect('SELECT * FROM "books" WHERE "id" = :id')
->with(['id' => 7])
->willFetch([
['id' => 7, 'title' => 'The Forest Song']
]);
use Xalaida\PDOMock\ResultSet;
$pdo->expect('SELECT * FROM "books" LIMIT 3')
->willFetch(
(new ResultSet())
->setCols(['id', 'title'])
->setRows([
[1, 'The Forest Song'],
[2, 'Kaidash’s Family'],
[3, 'Shadows of the Forgotten Ancestors'],
])
);
$pdo->expect('INSERT INTO "books" ("title") VALUES (?)')
->with(['The Forest Song'])
->willInsertId(7);
$pdo->expect('UPDATE "books" SET "status" = :status WHERE "year" = :year')
->with(['year' => 2020, 'status' => 'draft'])
->willAffect(5);
$pdo->expectBeginTransaction();
$pdo->expect('INSERT INTO "books" ("title") VALUES ("Kaidash’s Family")');
$pdo->expectCommit();
$pdo->expect('SELECT * FROM "books" WHERE "id" = :id');
$pdo->assertExpectationFulfilled();
use Xalaida\PDOMock\PDOMock;
use Xalaida\PDOMock\QueryComparatorRegex;
use Xalaida\PDOMock\ParamComparatorNatural;
PDOMock::useQueryComparator(new QueryComparatorRegex());
PDOMock::useParamComparator(new ParamComparatorNatural());
use PHPUnit\Framework\TestCase as BaseTestCase;
use Xalaida\PDOMock\Adapter\PHPUnit\PHPUnitAdapter;
use Xalaida\PDOMock\PDOMock;
class TestCase extends BaseTestCase
{
public static function setUpBeforeClass(): void
{
PDOMock::useAdapter(new PHPUnitAdapter());
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.