Bir birim test içinde bunu yapmak için hiçbir yolu yoktur. Eğer iki farklı testler halinde dönüş değeri ve haber test break up mümkündür.
Phpunit hatası işleyicisi PHP hataları ve uyarıları yakalar ve İstisnalar dönüştürür - tanım gereği program yürütme durur. Eğer test işlevi hiç geri dönmedi. Ancak, geçici bile zamanında, istisnalar içine hataların dönüşümünü devre dışı bırakabilirsiniz.
Bu bir örnek, yani burada iki test gibi görünmelidir ne muhtemelen daha kolaydır:
public function testLoadFileTriggersErrorWhenFileNotFound()
{
$this->setExpectedException('PHPUnit_Framework_Error_Warning'); // Or whichever exception it is
$result = load_file('/some/non-existent/file');
}
public function testLoadFileRetunsFalseWhenFileNotFound()
{
PHPUnit_Framework_Error_Warning::$enabled = FALSE;
$result = load_file('/some/non-existent/file');
$this->assertFalse($result);
}
Bu aynı zamanda testleri daha net, temiz ve kendini belgeleyen yapma avantaj vardır.
Re: Comment:
That's a great question, and I had no idea until I ran a couple of tests. It looks as if it will not restore the default/original value, at least as of PHPUnit 3.3.17 (the current stable release right now).
Yani, ben aslında öyle gibi görünmek için yukarıdaki değişiklik olur:
public function testLoadFileRetunsFalseWhenFileNotFound()
{
$warningEnabledOrig = PHPUnit_Framework_Error_Warning::$enabled;
PHPUnit_Framework_Error_Warning::$enabled = false;
$result = load_file('/some/non-existent/file');
$this->assertFalse($result);
PHPUnit_Framework_Error_Warning::$enabled = $warningEnabledOrig;
}
Re: Second Comment:
Bu tamamen doğru değil. Ben phpunit hata işleyicisi bakıyorum, ve aşağıdaki gibi çalışır:
- Eğer varsa bir
E_WARNING
, bir istisna sınıfı olarak PHPUnit_Framework_Error_Warning
kullanın.
- Bir
E_NOTICE
ya da E_STRICT
hata olursa, kullanımı PHPUnit_Framework_Error_Notice
- Else, istisna sınıfı gibi
PHPUnit_Framework_Error
kullanın.
Yani, evet, E_USER_*
phpunit adlı * _Warning veya * _Notice sınıfa dönük olmayan hatalar, yine de genel bir PHPUnit_Framework_Error
istisna haline dönüşür.
Further Thoughts
Bu işlevin nasıl kullanıldığını tam olarak bağlı iken bana olsaydı, herhalde, gerçek bir istisna atma yerine bir hata tetikleme geçmek istiyorum. Evet, bu bir dosyayı okuyamıyor zaman hemen infaz bitmiyor ... yöntemin mantık akışını ve yöntemi kullanır kodunu değiştirmek istiyorsunuz. Ama bu mevcut değil istenen dosya exceptional davranış gerçekten olup olmadığına karar vermek size kalmış. Onlar, idare testi ve uygulama akışına çalışmak daha kolaydır çünkü, hatalar / uyarılar / bildirimlerine yol daha istisnaları kullanma eğiliminde. Ben genellikle vb itfa yöntemi çağrıları, gibi şeyler için bildirimleri rezerv