Test Ek Açıklamaları
Ek açıklamalar, testlerin komut satırı test çalıştırıcısı tarafından nasıl ele alınacağını belirler. Test dosyasının başına yazılırlar.
Ek açıklamalarda büyük/küçük harf duyarlılığı yoktur. Ayrıca, test manuel olarak normal bir PHP betiği olarak çalıştırılırsa hiçbir etkileri yoktur.
Örnek:
/**
* TEST: Temel veritabanı sorgu testi.
*
* @dataProvider files/databases.ini
* @exitCode 56
* @phpVersion < 5.5
*/
require __DIR__ . '/../bootstrap.php';
TEST
Bu aslında bir ek açıklama değil, yalnızca başarısızlık durumunda veya günlüğe yazdırılan test başlığını belirler.
@skip
Test atlanır. Testleri geçici olarak devre dışı bırakmak için kullanışlıdır.
@phpVersion
Test, uygun PHP sürümüyle çalıştırılmazsa atlanır. Ek açıklamayı @phpVersion [operatör] sürüm
olarak yazarız. Operatörü atlayabiliriz, varsayılan >=
'dir. Örnekler:
/**
* @phpVersion 5.3.3
* @phpVersion < 5.5
* @phpVersion != 5.4.5
*/
@phpExtension
Test, belirtilen tüm PHP uzantıları yüklenmezse atlanır. Bir ek açıklamada birden fazla uzantı belirtebilir veya birden çok kez kullanabiliriz.
/**
* @phpExtension pdo, pdo_pgsql, pdo_mysql
* @phpExtension json
*/
@dataProvider
Test dosyasını birden çok kez, ancak farklı girdi verileriyle çalıştırmak istiyorsak, bu ek açıklama kullanışlıdır. (TestCase için aynı adlı ek açıklamayla karıştırmayın.)
@dataProvider file.ini
olarak yazarız, dosya yolu test dosyasına göreceli olarak alınır. Test, INI
dosyasındaki bölüm sayısı kadar çalıştırılacaktır. databases.ini
INI dosyasını varsayalım:
[mysql]
dsn = "mysql:host=127.0.0.1"
user = root
password = ******
[postgresql]
dsn = "pgsql:host=127.0.0.1;dbname=test"
user = postgres
password = ******
[sqlite]
dsn = "sqlite::memory:"
ve aynı dizinde database.phpt
testi:
/**
* @dataProvider databases.ini
*/
$args = Tester\Environment::loadData();
Test üç kez çalıştırılacak ve $args
her zaman mysql
, postgresql
veya
sqlite
bölümündeki değerleri içerecektir.
Ek açıklamayı soru işaretiyle @dataProvider? file.ini
olarak yazdığımız bir varyant daha vardır. Bu
durumda, INI dosyası mevcut değilse test atlanır.
Ek açıklamanın olanakları burada bitmiyor. INI dosyasının adından sonra, testin belirli bir bölüm için hangi koşullar altında çalıştırılacağını belirtebiliriz. INI dosyasını genişletelim:
[mysql]
dsn = "mysql:host=127.0.0.1"
user = root
password = ******
[postgresql 8.4]
dsn = "pgsql:host=127.0.0.1;dbname=test"
user = postgres
password = ******
[postgresql 9.1]
dsn = "pgsql:host=127.0.0.1;dbname=test;port=5433"
user = postgres
password = ******
[sqlite]
dsn = "sqlite::memory:"
ve koşullu ek açıklamayı kullanalım:
/**
* @dataProvider databases.ini postgresql, >=9.0
*/
Test yalnızca bir kez ve postgresql 9.1
bölümü için çalıştırılacaktır. Diğer bölümler koşul
filtresinden geçmez.
Benzer şekilde, INI dosyası yerine bir PHP betiğine başvurabiliriz. Bu, bir dizi veya Traversable döndürmelidir.
databases.php
dosyası:
return [
'postgresql 8.4' => [
'dsn' => '...',
'user' => '...',
],
'postgresql 9.1' => [
'dsn' => '...',
'user' => '...',
],
];
@multiple
@multiple N
olarak yazarız, burada N
bir tamsayıdır. Test tam olarak N kez
çalıştırılacaktır.
@testCase
Ek açıklamanın parametreleri yoktur. Testleri TestCase sınıfları olarak yazarsak kullanırız. Bu durumda, komut satırı test çalıştırıcısı bireysel metotları ayrı işlemlerde ve paralel olarak birden fazla iş parçacığında çalıştıracaktır. Bu, tüm test sürecini önemli ölçüde hızlandırabilir.
@exitCode
@exitCode N
olarak yazarız, burada N
çalıştırılan testin dönüş kodudur. Örneğin, testte
exit(10)
çağrılırsa, ek açıklamayı @exitCode 10
olarak yazarız ve test farklı bir kodla
biterse, bu bir başarısızlık olarak kabul edilir. Ek açıklamayı belirtmezsek, dönüş kodu 0 (sıfır) doğrulanır.
@httpCode
Ek açıklama yalnızca PHP ikili dosyası CGI ise geçerlidir. Aksi takdirde yok sayılır. @httpCode NNN
olarak
yazarız, burada NNN
beklenen HTTP kodudur. Ek açıklamayı belirtmezsek, HTTP kodu 200 doğrulanır. Eğer
NNN
'yi sıfıra değerlendirilen bir dize olarak yazarsak, örneğin any
, HTTP kodu doğrulanmaz.
@outputMatch ve @outputMatchFile
Ek açıklamaların işlevi Assert::match()
ve Assert::matchFile()
doğrulama ifadeleriyle aynıdır.
Ancak desen, testin standart çıktısına gönderdiği metinde aranır. Testin ölümcül bir hatayla biteceğini
varsaydığımızda ve çıktısını doğrulamamız gerektiğinde kullanışlıdır.
@phpIni
Test için yapılandırma INI değerlerini ayarlar. Örneğin @phpIni precision=20
olarak yazarız ve değeri
komut satırından -d precision=20
parametresiyle belirtmişiz gibi çalışır.