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
+
0
-

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
+
0
-

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ř. funkci initDatabase().
  • v testu, který využívá databázi, si soubor vlož hned za bootstrap require 'init-database-routines.php'
  • s setUp() metodě volej initDatabase($this->container->getService('nette.database.default')).

Bude se Ti hodit zamykání testů.

motorcb
Člen | 552
+
0
-

Super, díky.

Testy jako funkce zapsané v testu se spustí postupně nebo také paralelně?

function testSomething()
{
    Assert::true( true );
}

	function testSomething1()
{
    Assert::true( true );
}

	function testSomething2()
{
    Assert::true( true );
}
Milo
Nette Core | 1283
+
0
-

Pokud v záhlaví souboru testu uvedeš:

/**
 * @testCase
 */

tak se budou provádět paraleleně. Pro každou test metodu se otevře nový proces.

Když anotaci neuvedeš, provedou se všechny v sérii v jednom procesu.