PHPUnit - příklad mockování (odstraňování závislostí)
V dalším článku o testování pomocí PHPUnit je základně podíváme na tzv. mockování - odstraňování závislostí. A to jak jinak než na praktickém příkladu.
Pokud testovaná třída např. Unit obsahuje kontstruktor pro Nette databázi:
public function __construct(Nette\Database\Context $db)
{
$this->db = $db;
}
A my ji budeme chtít testovat:
public function testXyz()
{
$unit = new Unit();
....
}
Tak dostaneme po spuštění testu pochopitelně chybu:
There was 1 error:
1) App\Model\UnitTest::testXyz
ArgumentCountError: Too few arguments to function App\Model\Unit::__construct(), 0 passed in ....UnitTest.php on line 15 and exactly 1 expected
/var/www/.../app/model/Unit.php:13
/var/www/.../tests/UnitTest.php:15
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Řešením je vytvořit mock. Podstrčíme tedy mockem argument pro databázi takto:
$dbMock = $this->createMock(Nette\Database\Context::class);
$unit = new Unit($dbMock);
...
A problém v konstruktoru se tím vyřeší...
Odkazy