Jak zaručit pořadí testů?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- motorcb
- Člen | 552
Zdravím.
Mám test CreateDatabaseTest.phpt ve kterem inicializuji
databazi a data:
<?php
namespace Test;
use Nette,
Tester,
Tester\Assert;
$container = require __DIR__ . '/bootstrap.php';
class CreateDatabaseTest extends Tester\TestCase
{
private $container;
function __construct( Nette\DI\Container $container )
{
$this->container = $container;
}
function setUp()
{
$this->container->getService('nette.database.default')->query( file_get_contents(__DIR__.'/files/initialization.sql') );
}
public function tearDown()
{
//uklid
}
function testSomething()
{
Assert::true( true );
}
}
$test = new ExampleTest( $container );
$test->run();
A pak mam soubor CheckDataTest.phpt ve kterém koukám na Homepage:default kde počítám počet bloků vygenerovaných z DB.
Jak zaručím aby se test CheckDataTest.phpt spustil až po
testu CreateDatabaseTest.phpt?
Nyní mi testy procházejí. Chápu to správně že po spuštění testů:
vendor\bin\tester.bat -c tests/php-win.ini tests
se spustí oba testy paraelně a je jen náhoda že než začnu zjišťovat
počet prvků vygenerovaných z DB je již DB vytvořena?
- Milo
- Nette Core | 1283
Ano, pořadí testů se může náhodně měnit a mění se. Navíc, každý test se spustí ve vlastním procesu. Můžeš to řešit takhle:
- kód, který inicializuje databázi si vyčleň do samostatného souboru,
init-database-routines.php
(přípona PHP, ne PHPT). Bude obsahovat např. funkciinitDatabase()
. - v testu, který využívá databázi, si soubor vlož hned za
bootstrap
require 'init-database-routines.php'
- s
setUp()
metodě volejinitDatabase($this->container->getService('nette.database.default'))
.
Bude se Ti hodit zamykání testů.