Birim test sınıfları - söz konusu hataları atıyor?

3 Cevap php

Ben PHPUnit etrafında başımı almak ve mevcut bir sınıf için bir test durumu oluşturmaya çalışıyorum.

Sınıf alma ayarı ve uygulamada mevcut olacak yapılandırma seçeneklerini listeleme, statik bir yapılandırma sınıftır.

Sınıf çok sıkı inşa edilmiştir. Ben uyumsuz bir değeri veya bir E_USER_ERROR yazısının yürütülmesini durdurmuştur atılır, yoksa bir yapılandırma ayarı ile bir yapılandırma ayarını deneyin. Bu hata işleme sanat olmasa bile, bu sınıfın amaçları için çalışıyor. Bu sınıfta bir hata her zaman bir programlama hatası ve asla kötü kullanıcı girişi sonucudur.

Bu hata iletileri ele ya da ince kodunu tutar, nasıl oturum endişelenmenize gerek yok büyük bir avantaja sahiptir. Çıktı (üretim ya da değil) mesajı, die () yapılır.

Ancak, Birim testleri ile, ben klasik PHP hataları ile çalışmaya devam edebilirsiniz nasıl görmüyorum. Ben başarı bayrakları dönmek için fonksiyonları dönüştürmek zorunda, ya da istisnalar atmak olacaktır.

Ben düzeltmek muyum?

İstisnalar beklemek olduğu gibi veya hataları beklemek PHPUnit bir yolu var mı? Ben düz uzakta herhangi göremiyorum.

3 Cevap

Kimden PHPUnit manual:

Varsayılan olarak, PHPUnit PHP hataları, uyarıları ve istisna bir testin yürütülmesi sırasında tetiklenen uyarıları dönüştürür. Bu istisnaları kullanarak, örneğin, Örnek 4.8 'de gösterildiği gibi bir test PHP hata tetiklemek için bekleyebilirsiniz.

class ExpectedErrorTest extends PHPUnit_Framework_TestCase
{
    /**
     * @expectedException PHPUnit_Framework_Error
     */
    public function testFailingInclude()
    {
        include 'not_existing_file.php';
    }
}

Elbette istisnalar için aynı çalışır.

Edit: didn't see this was already mentioned in the comments, but I'll leave it here for reference in case someone looks for the same question and doesn't read the comments

Ben uygulama ayrıntılarını bilmiyorum, ama normal bir (özel) istisna yükseltmek (test edilebilir) ve bu (özel) dayalı uygun E_USER_ERROR atmak olacağını app küresel istisna işleyici olamazdı istisnalar?

set_exception_handler bu global istisna işleyici ayarlama hakkında daha fazla bilgi için kontrol edin.

Eğer birim test bir başarısızlık olarak (set_error_handler ) that will treat any error that cannot be handled by PHPUnit (such as E_USER_ERROR aracılığıyla) bir hata işleyicisi tanımlamak değil misiniz?

(Esinlenerek WordPress' tests)