2011-12-07 28 views
16

herkes nasıl uyarıları görmezden söyle ve testPHPUnit PHP uyarıları dikkate almamak

devam edebilirsiniz, şimdiye kadar herhangi bir uyarı testi komut o fonksiyonlar için yürütülmez kod geldiğinde benim işlevlerini test birimi için PHPUnit kullanarak Am
+10

birim test olması gerektiği gibi çalıştığını Bana göre:

Aşağıdaki kod PHPUnit documentation gelen örneğidir. Kodu, uyarılar veya hatalar atmayacak şekilde düzeltin. – JJJ

+0

@Juhana: Yalnızca işlevle ilgili uyarılarla ilgilenmediğim geri dönüş değerine ihtiyacım var. Test edilen işlev gayet iyi çalışıyor. –

+1

Bir ekip çalışması bağlamında, bazen kendi paketinizi test etmeniz gerekir ve başkalarının demetlerini temizlemek için zaman/kimlik bilgisi/göreviniz yoktur (bu, sadece çağrılmadıkları için uyarıları atabilir). Sadece belirli bir işlevi test etmek istediğinizde kod "yorumu alakasız görünüyor. – Xmanoux

cevap

28

Juhana'ın belirttiği gibi, her şeyden önce, uyarı (lar) ın göründüğü yerde kodunuzu düzeltmelisiniz. Kodun düzgün/katı şekilde çalışmadığının bir işareti.

Varsayılan olarak, PHPUnit, bir sınamanın yürütülmesi sırasında bir istisna uygulamasında tetiklenen PHP hatalarını, uyarılarını ve bildirimlerini varsayılan olarak dönüştürür.

sizin uyarılarının (ve nasıl testlerde çağrı alt rutinleri uyarıları görmezden) test etmek için nasıl daha fazla bilgi vardır Testing PHP Errors bakın.

Varsayılan davranışı devre dışı bırakmak için, PHPUnit uygulamasına testlerinizde örn.

# Warning: 
PHPUnit_Framework_Error_Warning::$enabled = FALSE; 

# notice, strict: 
PHPUnit_Framework_Error_Notice::$enabled = FALSE; 

varsayılan davranışını değiştirmek için bir diğer seçenek aşağıdaki ayarlarla configure the testrunner with an XML file etmektir:

<phpunit convertErrorsToExceptions="false" 
     convertNoticesToExceptions="false" 
     convertWarningsToExceptions="false"> 
</phpunit> 

Bunlar testin setUp veya genel ad alanında statik değişkeni ayarlayarak testin kendi içinde üç seçenek komut satırı anahtarları olarak kullanılamaz. Aynı soruya da bakınız: test the return value of a method that triggers an error with PHPUnit

+0

teşekkür u "ile çalışır", # PHPUnit_Framework_Error_Notice :: $ etkin = YANLIŞ; " –

+2

VfsStream ile bazı dosya işlemlerini sınamak için bunu kullanmayı denedim. PHP_Unit istisnalarının devre dışı bırakılması işe yaramadı (desteklenmeyen bazı chmod() nedeniyle gerekliydi). Her şeyden sonra iyi eski sessizlik operatörü '@' kullanmalıyım. – Zap

2

Test başına düzeyinde bunu belgelendirilmiş strateji, testiniz bir uyarıyı veya bildirimi tetikleyecek işlevi çağırdığında, @ hata süpresyonu operatörünü kullanmaktır.

<?php 
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase 
{ 
    public function testFileWriting() { 
     $writer = new FileWriter; 
     $this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff')); 
    } 
} 
class FileWriter 
{ 
    public function write($file, $content) { 
     $file = fopen($file, 'w'); 
     if($file == false) { 
      return false; 
     } 
     // ... 
    } 
}