Neden PHPUnit şeyleri OO şekilde yapıyor ısrar ediyor?

4 Cevap php

Alevli olma riski az ... ne avantajı yöntemlerden ziyade işlevleri bağlam örtük bir bağlamda var aramaları uygulanması gelmez.

PHP'nin sözdizimi neden phpunit yaratıcıları kullanımını zorunlu olurdu yöntemleri çağırmak için çok çirkin olduğunu düşünüyor?

Çerçeve küresel bir "currentTestCase" nesne ayarlanır ve daha sonra şeffaf başarısız ilişkili olsaydı biz yazılı olabileceği nesne ile öne sürer:

assertEquals("blah", $text);

eşdeğer karşı, ancak ayrıntılı olarak:

$this->assertEquals("blah", $text);

Tam bu bağlamda Ö.Ö. kullanarak elde ne.

Beni aydınlatmak Lütfen.

4 Cevap

PHPUnit xUnit türetilen ve xUnit bunu nasıl bulunuyor çünkü.

Neden xUnit bunu bu şekilde yapıyor? Seni sordum sevindim. Orijinal nedeni, Robert işaret ettiği gibi, xUnit Smalltalk'tan gelir ve Java JUnit tarafından popüler olmasıdır. Hiçbir seçeneğim vardı Hem OO-ya hiç dillerdir.

Bu diğer avantajları yok demek değildir. OO testleri kalıtsal olabilir. Eğer tüm ebeveynin testleri çalıştırmak ve sadece değiştirdik davranışları için test yöntemlerinin avuç geçersiz bir alt sınıfı test etmek istiyorsanız bu demektir. Bu test kod çoğaltmak kalmadan alt sınıflarından mükemmel kapsama alanı sağlar.

Ekleyebilir ve PHPUnit içinde assert yöntemlerini geçersiz kolay. Sadece alt sınıf PHPUnit_Framework_TestCase, kendi assert yöntemler yazmak ve test sınıfları yeni altsınıftan devralır. Ayrıca varsayılan yazmak setup ve teardown yöntemleri olabilir.

Son olarak, bu deney çerçevenin yöntemler de test ediyoruz şeyle çatışma vermeyeceğini garanti eder. Test framework sadece test içine fonksiyonları dökülüyor ve bir setup yöntem vardı şey test etmek istedim ... iyi belada.

O dedi, acını duyuyorum. Büyük bir test framework can sıkıcı ve hantal ve kırılgan olabilir. Perl bir xUnit stili kullanmak değildir, bu kısa test fonksiyon isimleri ile bir usul stili kullanır. Test::More bir örnek için bkz. Perde arkasında bunu önerdi sadece ne, tüm fonksiyonları kullanmak bir tek bir test örneği nesne var gelmez. Bir melez usul assert fonksiyonlar Test::Class her iki dünyanın en iyi yaptığı adlandırılan OO test yöntemleri modülü ile de var.

PHP'nin sözdizimi yöntemleri çağırmak için çok çirkin olduğunu göz önünde

Sana -> sevmiyorum sanırım. Ben onunla yaşamayı öğrenmek öneririz. OO PHP alternatif çok daha güzel olduğunu.

Bir iyi bir neden assertXXX bir yöntem adı olarak çatışmayı adlandırma için yüksek risk olmasıdır.

Smalltalk başlangıçta - Başka bir tipik nesne yönelimli diller ile uğraşan xUnit ailesi, elde olmasıdır. Bu örneğin senin "kardeşleri" kendinizi ilgili kolaylaştırır Java ve Ruby.

Değil doğrudan bir cevap, ama PHPUnit 3.5 gibi, sen $this-> Artık yazmak zorunda değilsiniz. PHPUnit 3,5 eklemek zorunda iddialar için bir fonksiyon kütüphanesi eklendi

require_once 'PHPUnit/Framework/Assert/Functions.php';

Sonra yapabilirsiniz

assertEquals('foo', $bar);

Bu konuda Sebastian Bergmann Blogu sonrası bakın

Sınıf yöntemleri test durumlarda sahip PHPUnit için çalışmak kaydeder. Nedeniyle yerleşik istihbarat PHPUnit eksikliği saf test fonksiyonlarını bulmak ya da beceremedi. Sadece tanımak zorunda - () iletileri-in> assert * Basit bir boolean zincir tekrar (PHPUnit için değil, test durumda yazar) işleme mantığı kaydeder. Bu bakış PHPUnit / SimpleTest noktasından havai kaydeder tüm sözdizimsel tuz bulunuyor.

Bu hata / uyarı mesajları, istisnaları yakalamak veya Phps yerli assert () deyimi tanımak için teknik bir sorun olmaz. Zor bir API daha enterprisey görünüyor çünkü bitmedi.