Ajutoarele
DomQuery
Tester\DomQuery
este o clasă care extinde SimpleXMLElement
cu metode care facilitează testarea
conținutului HTML sau XML.
# în $html este un șir de caractere cu documentul HTML, în $dom obținem elementul rădăcină
$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]');
# sau verifică dacă elementul se potrivește cu selectorul (din versiunea 2.5.3)
Assert::true($elems[0]->matches('[type="submit"]'));
FileMock
Tester\FileMock
emulează fișiere în memorie pentru a vă ajuta să testați un cod care utilizează funcții
precum fopen()
, file_get_contents()
sau parse_ini_file()
. De exemplu:
# 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()
Aceasta nu este o afirmație, ci un ajutor pentru testarea metodelor private și a obiectelor de proprietate.
class Entity
{
private $enabled;
// ...
}
$ent = new Entity;
Assert::with($ent, function () {
Assert::true($this->enabled); // accesibil private $ent->enabled
});
Helpers::purge()
Metoda purge()
creează directorul specificat și, dacă acesta există deja, șterge întregul său conținut.
Această metodă este utilă pentru crearea de directoare temporare. De exemplu, în tests/bootstrap.php
:
@mkdir(__DIR__ . '/tmp'); # @ - directory may already exist
define('TempDir', __DIR__ . '/tmp/' . getmypid());
Tester\Helpers::purge(TempDir);
Environment::lock()
Testele se execută în paralel. Uneori este nevoie să nu suprapunem rularea testelor. De obicei, testele bazelor de date
trebuie să pregătească conținutul bazei de date și nu trebuie să fie perturbate de nimic în timpul rulării testului. În
aceste cazuri, folosim Tester\Environment::lock($name, $dir)
:
Tester\Environment::lock('database', __DIR__ . '/tmp');
Primul argument este un nume de blocare. Al doilea este o cale către directorul în care se salvează blocajul. Testul care obține primul blocajul se execută. Celelalte teste trebuie să aștepte până la finalizarea acestuia.
Environment::bypassFinals()
Clasele sau metodele marcate ca final
sunt greu de testat. Apelarea
Tester\Environment::bypassFinals()
într-un început de test determină eliminarea cuvintelor cheie
final
în timpul încărcării codului.
require __DIR__ . '/bootstrap.php';
Tester\Environment::bypassFinals();
class MyClass extends NormallyFinalClass # <-- NormallyFinalClass is not final anymore
{
// ...
}
Environment::setup()
- îmbunătățește lizibilitatea descărcării erorilor (colorare inclusă), în caz contrar, se tipărește implicit stack trace-ul PHP
- permite verificarea faptului că aserțiunile au fost apelate în test, în caz contrar, testele fără aserțiuni (de exemplu, uitate) trec și ele
- pornește automat colectorul de acoperire a codului atunci când se utilizează
--coverage
(descris mai târziu) - tipărește starea OK sau FAILURE la sfârșitul scriptului.
Environment::setupFunctions()
Creează funcțiile globale test()
, testException()
, setUp()
și tearDown()
în care puteți împărți testele.
test('test description', function () {
Assert::same(123, foo());
Assert::false(bar());
// ...
});
Environment::VariableRunner
Vă permite să aflați dacă testul a fost executat direct sau prin intermediul Tester.
if (getenv(Tester\Environment::VariableRunner)) {
# run by Tester
} else {
# another way
}
Environment::VariableThread
Tester execută testele în paralel într-un anumit număr de fire de execuție. Vom găsi un număr de fire într-o variabilă de mediu atunci când suntem interesați:
echo "I'm running in a thread number " . getenv(Tester\Environment::VariableThread);