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.