Βοηθοί

DomQuery

Tester\DomQuery είναι μια κλάση που επεκτείνει το SimpleXMLElement με μεθόδους που διευκολύνουν τον έλεγχο περιεχομένου HTML ή 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 προσομοιώνει αρχεία στη μνήμη για να σας βοηθήσει να ελέγξετε έναν κώδικα που χρησιμοποιεί συναρτήσεις όπως fopen(), file_get_contents() ή parse_ini_file(). Για παράδειγμα:

# 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()

Αυτό δεν είναι ένας ισχυρισμός, αλλά ένα βοήθημα για τον έλεγχο ιδιωτικών μεθόδων και αντικειμένων ιδιοτήτων.

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

$ent = new Entity;

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

Helpers::purge()

Η μέθοδος purge() δημιουργεί τον καθορισμένο κατάλογο και, αν υπάρχει ήδη, διαγράφει ολόκληρο το περιεχόμενό του. Είναι χρήσιμη για τη δημιουργία προσωρινών καταλόγων. Για παράδειγμα στην tests/bootstrap.php:

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

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

Environment::lock()

Οι δοκιμές εκτελούνται παράλληλα. Μερικές φορές δεν χρειάζεται να επικαλύψουμε την εκτέλεση των δοκιμών. Συνήθως οι δοκιμές βάσεων δεδομένων πρέπει να προετοιμάζουν το περιεχόμενο της βάσης δεδομένων και δεν χρειάζεται να τις διαταράσσει τίποτα κατά τη διάρκεια της εκτέλεσης της δοκιμής. Σε αυτές τις περιπτώσεις χρησιμοποιούμε το Tester\Environment::lock($name, $dir):

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

Το πρώτο όρισμα είναι ένα όνομα κλειδώματος. Το δεύτερο είναι η διαδρομή προς τον κατάλογο για την αποθήκευση της κλειδαριάς. Εκτελείται πρώτα η δοκιμή που αποκτά την κλειδαριά. Οι άλλες δοκιμές πρέπει να περιμένουν μέχρι να ολοκληρωθεί.

Environment::bypassFinals()

Οι κλάσεις ή οι μέθοδοι που χαρακτηρίζονται ως final είναι δύσκολο να δοκιμαστούν. Η κλήση του Tester\Environment::bypassFinals() σε μια αρχή δοκιμής προκαλεί την αφαίρεση των λέξεων-κλειδιών final κατά τη φόρτωση του κώδικα.

require __DIR__ . '/bootstrap.php';

Tester\Environment::bypassFinals();

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

Environment::setup()

  • βελτιώνει την αναγνωσιμότητα της απόρριψης σφαλμάτων (περιλαμβάνεται χρωματισμός), διαφορετικά, εκτυπώνεται το προεπιλεγμένο ίχνος στοίβας PHP
  • επιτρέπει τον έλεγχο ότι οι ισχυρισμοί έχουν κληθεί στη δοκιμή, διαφορετικά, οι δοκιμές χωρίς (π.χ. ξεχασμένους) ισχυρισμούς περνούν επίσης
  • εκκινεί αυτόματα τον συλλέκτη κάλυψης κώδικα όταν χρησιμοποιείται το --coverage (περιγράφεται αργότερα)
  • εκτυπώνει την κατάσταση OK ή FAILURE στο τέλος του σεναρίου.

Environment::setupFunctions()

Δημιουργεί τις παγκόσμιες συναρτήσεις test(), testException(), setUp() και tearDown() στις οποίες μπορείτε να χωρίσετε τις δοκιμές.

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

Environment::VariableRunner

Σας επιτρέπει να μάθετε αν η δοκιμή εκτελέστηκε απευθείας ή μέσω του Tester.

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

Environment::VariableThread

Ο Tester εκτελεί δοκιμές παράλληλα σε συγκεκριμένο αριθμό νημάτων. Θα βρούμε έναν αριθμό νημάτων σε μια περιβαλλοντική μεταβλητή όταν μας ενδιαφέρει:

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