Yardımcı Sınıflar
DomQuery
Tester\DomQuery
, SimpleXMLElement
'i CSS seçicileri kullanarak HTML veya XML'de kolay arama yapma
özelliğiyle genişleten bir sınıftır.
# HTML dizesinden DomQuery oluşturma
$dom = Tester\DomQuery::fromHtml('
<article class="post">
<h1>Başlık</h1>
<div class="content">Metin</div>
</article>
');
# CSS seçicileri kullanarak öğelerin varlığını test etme
Assert::true($dom->has('article.post'));
Assert::true($dom->has('h1'));
# Öğeleri DomQuery nesneleri dizisi olarak bulma
$headings = $dom->find('h1');
Assert::same('Başlık', (string) $headings[0]);
# Öğenin seçiciyle eşleşip eşleşmediğini test etme (sürüm 2.5.3'ten itibaren)
$content = $dom->find('.content')[0];
Assert::true($content->matches('div'));
Assert::false($content->matches('p'));
# Seçiciyle eşleşen en yakın atayı bulma (2.5.5'ten itibaren)
$article = $content->closest('.post');
Assert::true($article->matches('article'));
FileMock
Tester\FileMock
, bellekte dosyaları taklit eder ve fopen()
, file_get_contents()
,
parse_ini_file()
ve benzeri fonksiyonları kullanan kodun test edilmesini kolaylaştırır. Kullanım örneği:
# Test edilen sınıf
class Logger
{
public function __construct(
private string $logFile,
) {
}
public function log(string $message): void
{
file_put_contents($this->logFile, $message . "\n", FILE_APPEND);
}
}
# Yeni boş dosya
$file = Tester\FileMock::create('');
$logger = new Logger($file);
$logger->log('Giriş');
$logger->log('Çıkış');
# Oluşturulan içeriği test ediyoruz
Assert::same("Giriş\nÇıkış\n", file_get_contents($file));
Assert::with()
Bu bir doğrulama ifadesi değil, nesnelerin özel metotlarını ve özelliklerini test etmek için bir yardımcıdır.
class Entity
{
private $enabled;
// ...
}
$ent = new Entity;
Assert::with($ent, function () {
Assert::true($this->enabled); // erişilebilir hale getirilen özel $ent->enabled
});
Helpers::purge()
purge()
metodu belirtilen dizini oluşturur ve eğer zaten varsa, tüm içeriğini siler. Geçici bir dizin
oluşturmak için kullanışlıdır. Örneğin tests/bootstrap.php
içinde:
@mkdir(__DIR__ . '/tmp'); # @ - dizin zaten var olabilir
define('TempDir', __DIR__ . '/tmp/' . getmypid());
Tester\Helpers::purge(TempDir);
Environment::lock()
Testler paralel olarak çalıştırılır. Ancak bazen testlerin çalışmasının çakışmamasını isteriz. Tipik olarak
veritabanı testlerinde, testin veritabanı içeriğini hazırlaması ve başka bir testin çalışma süresi boyunca
veritabanına dokunmaması gerekir. Bu testlerde Tester\Environment::lock($name, $dir)
kullanırız:
Tester\Environment::lock('database', __DIR__ . '/tmp');
İlk parametre kilit adıdır, ikincisi kilidi saklamak için dizin yoludur. Kilidi ilk alan test çalışır, diğer testler onun tamamlanmasını beklemek zorundadır.
Environment::bypassFinals()
final
olarak işaretlenmiş sınıflar veya metotlar test edilmesi zordur. Testin başında
Tester\Environment::bypassFinals()
çağrısı, kod yüklenirken final
anahtar kelimelerinin
atlanmasına neden olur.
require __DIR__ . '/bootstrap.php';
Tester\Environment::bypassFinals();
class MyClass extends NormallyFinalClass # <-- NormallyFinalClass artık final değil
{
// ...
}
Environment::setup()
- hata çıktısının okunabilirliğini artırır (renklendirme dahil), aksi takdirde varsayılan PHP yığın izi yazdırılır
- testte doğrulama ifadelerinin çağrılıp çağrılmadığını kontrol etmeyi etkinleştirir, aksi takdirde doğrulama ifadesi olmayan (örneğin unutulmuş) bir test de geçer
--coverage
kullanıldığında, çalıştırılan kod hakkındaki bilgilerin toplanmasını otomatik olarak başlatır (daha sonra açıklanmıştır)- betiğin sonunda OK veya FAILURE durumunu yazdırır
Environment::setupFunctions()
Testleri bölebileceğiniz test()
, testException()
, setUp()
ve tearDown()
global fonksiyonlarını oluşturur.
test('test açıklaması', function () {
Assert::same(123, foo());
Assert::false(bar());
// ...
});
Environment::VariableRunner
Testin doğrudan mı yoksa Tester aracılığıyla mı çalıştırıldığını belirlemeyi sağlar.
if (getenv(Tester\Environment::VariableRunner)) {
# Tester tarafından çalıştırıldı
} else {
# Başka bir şekilde çalıştırıldı
}
Environment::VariableThread
Tester, testleri belirtilen sayıda iş parçacığında paralel olarak çalıştırır. İş parçacığı numarasını merak ediyorsak, onu ortam değişkeninden öğreniriz:
echo "Çalıştığım iş parçacığı numarası " . getenv(Tester\Environment::VariableThread);