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çıklamalar büyük/küçük harfe duyarlı değildir. Ayrıca, test normal bir PHP betiği olarak manuel olarak çalıştırılırsa hiçbir etkisi olmaz.
Örnek:
/**
* TEST: Basic database query test.
*
* @dataProvider files/databases.ini
* @exitCode 56
* @phpVersion < 5.5
*/
require __DIR__ . '/../bootstrap.php';
TEST
Aslında bir açıklama değildir. Yalnızca başarısız olduğunda veya günlüklere yazdırılan test başlığını ayarlar.
@skip
Test atlanır. Geçici test devre dışı bırakma için kullanışlıdır.
@phpVersion
İlgili PHP sürümü tarafından çalıştırılmazsa test atlanır. Ek açıklamayı şu şekilde yazıyoruz
@phpVersion [operator] version
. Operatörü dışarıda bırakabiliriz, varsayılan değer >=
.
Örnekler:
/**
* @phpVersion 5.3.3
* @phpVersion < 5.5
* @phpVersion != 5.4.5
*/
@phpExtension
Bahsedilen tüm PHP uzantıları yüklenmemişse test atlanır. Tek bir ek açıklamada birden fazla uzantı yazılabilir veya ek açıklamayı birden fazla kez kullanabiliriz.
/**
* @phpExtension pdo, pdo_pgsql, pdo_mysql
* @phpExtension json
*/
@dataProvider
Bu ek açıklama, testi birden çok kez ancak farklı verilerle çalıştırmak istediğimizde uygundur. ( TestCase için aynı adı taşıyan ek açıklama ile karıştırılmamalıdır).
Ek açıklamayı @dataProvider file.ini
olarak yazıyoruz. INI dosya yolu test dosyasına görelidir. Test, INI
dosyasında bulunan bölüm sayısı kadar çalışır. INI dosyasının databases.ini
olduğunu 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ı dizindeki database.phpt
dosyası:
/**
* @dataProvider databases.ini
*/
$args = Tester\Environment::loadData();
Test üç kez çalışır ve $args
, mysql
, postgresql
veya sqlite
bölümlerinden değerler içerir.
@dataProvider? file.ini
şeklinde bir soru işareti ile ek açıklamalar yazdığımızda bir varyasyon daha
vardır. Bu durumda, INI dosyası mevcut değilse test atlanır.
Ek açıklama olanaklarının hepsinden henüz bahsedilmedi. INI dosyasından sonra koşulları yazabiliriz. Test, yalnızca tüm koşullar eşleşirse verilen bölüm için çalışır. 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şul ile ek açıklama kullanacağız:
/**
* @dataProvider databases.ini postgresql, >=9.0
*/
Test postgresql 9.1
bölümü için yalnızca bir kez çalışır. Diğer bölümler koşullarla eşleşmiyor.
Benzer şekilde, INI yerine bir PHP betiğine yol aktarabiliriz. Dizi veya Traversable döndürmelidir. Dosya
databases.php
:
return [
'postgresql 8.4' => [
'dsn' => '...',
'user' => '...',
],
'postgresql 9.1' => [
'dsn' => '...',
'user' => '...',
],
];
@multiple
Bunu @multiple N
şeklinde yazıyoruz, burada N
bir tam sayıdır. Test tam olarak N kez
çalışır.
testCase
Annotation'ın parametresi yoktur. TestCase sınıfları olarak bir test yazdığımızda kullanırız. Bu durumda, komut satırı test koşucusu, ayrı yöntemleri ayrı işlemlerde ve birden çok iş parçacığında paralel olarak çalıştıracaktır. Bu, tüm test sürecini önemli ölçüde hızlandırabilir.
ExitCode
Testte N
is the exit code of the test. For example if exit(10)
çağrıldığı yerde
@exitCode N
olarak yazıyoruz, ek açıklamayı @exitCode 10
olarak yazıyoruz. Test farklı bir kod ile
biterse başarısız kabul edilir. Ek açıklamayı dışarıda bırakırsak çıkış kodu 0 (sıfır) doğrulanır
@httpCode
Ek açıklama sadece PHP ikilisi CGI ise değerlendirilir. Aksi takdirde yok sayılır. Bunu @httpCode NNN
olarak
yazıyoruz, burada NNN
beklenen HTTP kodudur. Ek açıklamayı dışarıda bırakırsak HTTP kodu 200 doğrulanır.
Eğer NNN
adresini sıfır olarak değerlendirilen bir dize olarak yazarsak, örneğin any
, HTTP kodu
hiç kontrol edilmez.
outputMatch a @outputMatchFile
Ek açıklamaların davranışı Assert::match()
ve Assert::matchFile()
assertions ile tutarlıdır.
Ancak model testin standart çıktısında bulunur. Uygun bir kullanım durumu, testin ölümcül bir hata ile sona erdiğini
varsaydığımız ve çıktısını doğrulamamız gereken durumdur.
@phpIni
Test için INI yapılandırma değerlerini ayarlar. Örneğin @phpIni precision=20
şeklinde yazıyoruz ve komut
satırından -d precision=20
parametresi ile değer aktarmışız gibi çalışıyor.