Jednotlivé testy z TestCase v konzoli zvlášť

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
fidLi
Člen | 41
+
0
-

Zdary,
Mám dva TestCase a jeden soubor tests.phpt který spouštím v CLI takto: „vendor/bin/tester.bat tests/tests.phpt“

Testů mám celkem 6. Konzole však píše „OK (1 tests, …)“

Testy proběhnou však všechny, existuje nějaký přepínač, který zaznamená průběh jednotlivých testů, tedy v tomto případě by vypsal 6? Nebo je moje koncepce unit testů špatná a je nějaká, která by problém vyřešila?

tests.phpt

<?php
$container = require 'bootstrap.php';
require 'BasePresenterTest.php';
require 'UserManagerTest.php';

$userManagerTest = new UserManagerTest; //TestCase
$basePresenterTest = new BasePresenterTest; //TestCase

$basePresenterTest->run();
$userManagerTest->run();
?>
Filip Klimeš
Nette Blogger | 156
+
+1
-

Nemusíš vůbec pouštět testy v jednom .phpt, místo toho volej jen

vendor/bin/tester.bat tests/

a tester si už všechny .phpt soubory ve složce tests/ najde sám.

Nezapomeň si teď requirovat bootstrap a spouštět testy v každém souboru zlášť. Tedy např.

$container = require 'bootstrap.php';

/**
 * @testCase <-- tohle ti bude každou metodu test*() pouštět paralelně a počítat jí jako samostatný test case
 */
class UserManagerTest extends TestCase { ... }

(new UserManagerTest())->run();

Editoval Filip Klimeš (20. 3. 2015 20:54)

Filip Procházka
Moderator | 4668
+
+3
-

Správě by docblock s annotací @testCase měl být na úplném začátku souboru.

<?php

/**
 * @testCase
 */

require __DIR__ . '/../bootstrap.php';

class UserManagerTest extends TestCase
{
	public function testFunction()
	{
		// ..
	}

	// ..
}

(new UserManagerTest())->run();

Když potom chceš pustit všechny testy, atk voláš

vendor/bin/tester tests/

když chceš jenom jeden testcase, tak to můžeš udělat přímo nebo přes runner (s tím že runner je pustí paralelně, pokud soubor obsahuje @testCase annotaci)

vendor/bin/tester tests/UserManagerTest.phpt
// nebo
php tests/UserManagerTest.phpt

a když chceš pustit jenom jeden test, tak je možné zavolat

php tests/UserManagerTest.phpt testFunction

Funguje to protože Tester\TestCase čte v ->run() cli argumenty a pokud mu pošleš název (celý název) metody, tak pustí jenom tu jednu metodu.

Honza Kuchař
Člen | 1662
+
0
-

Taky jsem se na @testCase nachytal, když jsem si s Testerem hrál poprvé. V dokumentaci je to hodně zašoupnuté.