Pomočniki

DomQuery

Tester\DomQuery je razred, ki razširja SimpleXMLElement z metodami, ki olajšajo testiranje vsebine HTML ali XML.

# let's have an HTML document in $html that we load
$dom = Tester\DomQuery::fromHtml($html);

# we can test the presence of elements using CSS selectors
Assert::true($dom->has('form#registration'));
Assert::true($dom->has('input[name="username"]'));
Assert::true($dom->has('input[type="submit"]'));

# or select elements as array of DomQuery
$elems = $dom->find('input[data-autocomplete]');

FileMock

Tester\FileMock emulira datoteke v pomnilniku in vam pomaga pri testiranju kode, ki uporablja funkcije, kot so fopen(), file_get_contents() ali parse_ini_file(). Na primer:

# Tested class
class Logger
{
	public function __construct(
		private string $logFile,
	) {
	}

	public function log(string $message): void
	{
		file_put_contents($this->logFile, $message . "\n", FILE_APPEND);
	}
}

# New empty file
$file = Tester\FileMock::create('');

$logger = new Logger($file);
$logger->log('Login');
$logger->log('Logout');

# Created content testing
Assert::same("Login\nLogout\n", file_get_contents($file));

Assert::with()

To ni trditev, temveč pomočnik za testiranje zasebnih metod in lastnosti objektov.

class Entity
{
	private $enabled;
	// ...
}

$ent = new Entity;

Assert::with($ent, function () {
	Assert::true($this->enabled); // dostopno zasebno $ent->enabled
});

Helpers::purge()

Metoda purge() ustvari določen imenik in, če ta že obstaja, izbriše njegovo celotno vsebino. Metoda je priročna za ustvarjanje začasnih imenikov. Na primer v tests/bootstrap.php:

@mkdir(__DIR__ . '/tmp');  # @ - directory may already exist

define('TempDir', __DIR__ . '/tmp/' . getmypid());
Tester\Helpers::purge(TempDir);

Environment::lock()

Testi se izvajajo vzporedno. Včasih ni treba, da se izvajanje testov prekriva. Običajno morajo testi podatkovne zbirke pripraviti vsebino podatkovne zbirke in jih med izvajanjem testa ne sme nič motiti. V teh primerih uporabimo Tester\Environment::lock($name, $dir):

Tester\Environment::lock('database', __DIR__ . '/tmp');

Prvi argument je ime ključavnice. Drugi je pot do imenika za shranjevanje ključavnice. Najprej se izvede test, ki pridobi ključavnico. Drugi testi morajo počakati, da se zaključi.

Environment::bypassFinals()

Razrede ali metode, označene kot final, je težko testirati. Klicanje Tester\Environment::bypassFinals() v testnem začetku povzroči, da se ključne besede final med nalaganjem kode odstranijo.

require __DIR__ . '/bootstrap.php';

Tester\Environment::bypassFinals();

class MyClass extends NormallyFinalClass  # <-- NormallyFinalClass is not final anymore
{
	// ...
}

Environment::setup()

  • izboljša berljivost izpisa napak (vključena obarvanost), sicer se privzeto izpiše sled sklada PHP
  • omogoča preverjanje, ali so bile v testu poklicane trditve, sicer testi brez (npr. pozabljenih) trditev tudi preidejo
  • samodejno zažene zbiralnik pokritosti kode, če se uporablja --coverage (opisano pozneje)
  • na koncu skripte izpiše stanje OK ali FAILURE

Environment::setupFunctions()

Ustvari globalne funkcije test(), testException(), setUp() in tearDown(), v katere lahko razdelite teste.

test('test description', function () {
	Assert::same(123, foo());
	Assert::false(bar());
	// ...
});

Environment::VariableRunner

Omogoča ugotoviti, ali je bil test izveden neposredno ali prek preizkuševalnika.

if (getenv(Tester\Environment::VariableRunner)) {
	# run by Tester
} else {
	# another way
}

Environment::VariableThread

Tester izvaja teste vzporedno v danem številu niti. Število niti bomo poiskali v okoljski spremenljivki, ko nas bo to zanimalo:

echo "I'm running in a thread number " . getenv(Tester\Environment::VariableThread);