Bir istisna bekliyoruz neden PHPUnit iddialarını görmezden geliyor?

2 Cevap php

Ben tasarım türü uyumsuzlukları ve tanımsız yapılandırma ayarları PHP hataları tetikler bir yapılandırma sınıfın basit bir birim test case (kapsamlı soru here) var. Hata ek olarak, bu yöntem geri çıkılır false.

Benim test durumda, ben başarısız bir dizi test istiyorum. Sorun ben dönüş değeri basit bir 'assert' yapamaz şudur: bir test çalışması sırasında atılan her hata bir PHPUnit_Framework_Error istisna haline dönüştürülür.

Şimdi ben bir hata bekliyorum ki PHPUnit farkında yapabilirsiniz:

/**
 * @expectedException PHPUnit_Framework_Error
 */

public function testSetInvalidKey()
 {
     $this->assertEquals(true, conf::set("invalid_key", "12345"));     
 } 

Bu iyi çalışır, ama ne ben anlamıyorum, o işlev içinde herhangi bir ek onaylama not değerlendirilecektir olmasıdır. Başarısız ya da olmaz olsun, PHPUnit istisna gerçekleşmesi için only beklemek ve ne zaman bütün fonksiyonu ile memnun görünüyor.

Zekâ, bu test OK çalışacaktır:

/**
 * @expectedException PHPUnit_Framework_Error
 */

 public function testSetInvalidKey()
 { 
   // The error will be triggered here
   $this->assertEquals(true, conf::set("invalid_key", "12345"));                      
   $this->assertEquals(12345, 67810);   // Huh?    
   $this->assertEquals("abc", "def");   // Huh?
   $this->assertEquals(true, false);    // Huh?

 }

Neden? Bu amaçlanan davranış mı?

Ben sadece farklı fonksiyonlara onaylamaları ayırmak istiyorum farkındayım, ama davranışlarını anlamak istiyorum.

2 Cevap

conf::set() yöntemi kapsamında olduğundan testSetInvalidKey() karşılık gelen catch bloğu dışında olmalıdır. Bir kez yakaladı ve beklenen istisna olarak açmış, ben PHP ilk onaylama sonra yürütülmesine devam nasıl görmüyorum.

Extreme psuedo kodu:

class Tester
{
  public function run()
  {
    try {
      $test->testSetInvalidKey();
    }
    catch (PHPUnit_Framework_Error $e) {
      // Expected exception caught! Woohoo!
      // How can I continue to run the above method where I left off?
    }
  }
}

Bu tür davranışlar deney aksiyom başına 1 iddiasına inananlar için büyük bir savunucusu olacaktır.

php birim istisnalar sınamak için yeteneğine sahiptir. Bir göz atın:

http://www.phpunit.de/manual/3.2/en/writing-tests-for-phpunit.html