Sen birim test usul PHP, hiçbir sorun olabilir. Kod HTML ile karışık Ve eğer şans kesinlikle değiliz.
Uygulama veya kabul test seviyesinde, usul PHP muhtemelen davranışını belirlemek için superglobals değeri ($_POST, $_GET, $_COOKIE
, vb) bağlıdır ve bir şablon dosyasını da dahil olmak üzere ve çıkış tükürerek biter.
To do application-level testing, you can just set the superglobal values; start an output buffer (to keep a bunch of html from flooding your screen); call the page; assert against stuff inside the buffer; and trash the buffer at the end.
So, you could do something like this:
public function setUp()
{
if (isset($_POST['foo'])) {
unset($_POST['foo']);
}
}
public function testSomeKindOfAcceptanceTest()
{
$_POST['foo'] = 'bar';
ob_start();
include('fileToTest.php');
$output = ob_get_flush();
$this->assertContains($someExpectedString, $output);
}
Değil çalışma veya uygulama düzeyinde özelliklere sahip bile içeren bir sürü muazzam "çerçeveler" için, test bu tür size söyleyecektir. Bu, kod geliştirme başlamak gibi veritabanı bağlayıcı hala çalışıyor ve eskisinden daha iyi görünüyor ikna olsanız bile, bir düğmesini tıklatın ve evet, hala can, bu görmek isteyeceksiniz, çünkü gerçekten önemli olacak giriş ve veritabanı üzerinden çıkış.
Düşük seviyelerde, değişken kapsamı ve fonksiyonları (doğru veya yanlış dönen) veya doğrudan sonucu dönmek yan etkileri çalışması olup olmadığına bağlı olarak küçük farklılıklar bulunmaktadır.
Değişkenler fonksiyonlar arasındaki parametre parametreleri ya da diziler, açıkça etrafında geçti mi? Veya değişkenler pek çok farklı yerlerde ayarlanır ve globaller gibi dolaylı geçirilir? O (iyi) açık durumda ise, ünite (1) (2) doğrudan fonksiyon testi değerleri, beslenme ve (3) çıkışını yakalayan ve buna karşı iddia sonra, işlevini tutan dosyasını dahil ederek bir işlevi test edebilirsiniz. Eğer küresellerle kullanıyorsanız, sadece ($ _POST örnekte, yukarıdaki gibi) ekstra dikkatli olmak zorunda testlerinin arasındaki tüm globallerinin dikkatle null. Bu globalsin çok iter ve çeker bir işlevi ile uğraşırken (1-2 öne sürer, 5-10 çizgiler) çok küçük testleri tutmak için de özellikle yararlı olur.
Bir başka temel sorun işlevleri çıktı iade ederek işe, ya da, geçirilen params değiştirerek yerine doğru / yanlış dönerek olup olmadığıdır. İlk durumda, test edilmesi daha kolay olmakla birlikte, yine de, her iki durumda da mümkündür:
// assuming you required the file of interest at the top of the test file
public function testShouldConcatenateTwoStringsAndReturnResult()
{
$stringOne = 'foo';
$stringTwo = 'bar';
$expectedOutput = 'foobar';
$output = myCustomCatFunction($stringOne, $stringTwo);
$this->assertEquals($expectedOutput, $output);
}
Kodunuzu yan etkileri çalışır ve doğru veya yanlış döndürür nerede kötü durumda, yine oldukça kolay test edebilirsiniz:
/* suppose your cat function stupidly
* overwrites the first parameter
* with the result of concatenation,
* as an admittedly contrived example
*/
public function testShouldConcatenateTwoStringsAndReturnTrue()
{
$stringOne = 'foo';
$stringTwo = 'bar';
$expectedOutput = 'foobar';
$output = myCustomCatFunction($stringOne, $stringTwo);
$this->assertTrue($output);
$this->Equals($expectedOutput, $stringOne);
}
Umarım bu yardımcı olur.