Birim testleri ayırma

4 Cevap php

O should küresel xUnit tasarım soru rağmen bu soru, PHPUnit ile ilgili olduğunu.

Ben bir sınıf için bir Birim test davayı yazıyorum Image.

Bu sınıfın yöntemlerden biri olan setBackgroundColor().

Ben bu yöntemi test etmek gerekir 4 farklı davranışlar vardır

  1. Geçersiz bir arka plan rengini ayarlamak için çalışıyoruz. Birden geçersiz parametreler test edilecektir.
  2. Kısa bir el RGB dizi kullanan, örneğin geçerli bir arka plan rengini ayarlamak için çalışılıyor array(255,255,255)
  3. Bir standart RGB dizi kullanarak geçerli bir arka plan rengini ayarlamak için çalışılıyor, örneğin array('red' => 255, 'green' => 255, 'blue' => 255) (bu GD fonksiyonun çıktı biçimidir imagecolorsforindex())
  4. Şeffaf sabit IMG_COLOR_TRANSPARENT kullanarak geçerli bir arka plan rengini ayarlamak için çalışılıyor

Şu anda, ben bütün bu ancak ben alıyorum, testSetBackgroundColor() adlandırılan benim test halinde 1 test içinde bulunabilirdi Test oldukça uzun oluyor ve bir sürü yapıyor gibi bu 4 ayrı test olmalıdır duygu.

Benim soru Ben burada ne yapmak gerekir? Ben Görüntü test davanın 1 testi, içine tüm bu encapsulate mı, yoksa ben gibi ayrı ayrı testler içine yukarıdaki bölerim,

  • testSetBackgroundColorErrors
  • testSetBackgroundColorShorthandRGB
  • testSetBackgroundColorRGB
  • testSetBackgroundColorTransparent

Ben burada söz konusu testi koymak http://pastebin.com/f561fc1ab. Ettik

Teşekkür

4 Cevap

Bölünmüş. Kesinlikle.

Bir birim test başarısız olduğunda tam olarak ne bozuldu derhal açık olmalıdır. Eğer testler birleştirirseniz, debugging bir birim test hatası olacak.

Bu arada, sen writing tests first? TDD sayesinde şişirilmiş testleri ile sona düşüktür.

Benim tercih size açıklamak gibi testleri parçalanmasıdır.

  • Bu bir test başarısız olur ve bu nedenle hata ayıklama hızlı zaman yanlış gitti ne daha belirgin hale
  • Sen test koşulları arasında temiz bir başlangıç ​​durumuna nesnelerin bir sıfırlama parası almak
  • Bu kolay sadece yöntem adları bakarak sizi ihmal / dahil ettik hangi testleri görmek için yapar

Entegrasyon testleri ve ünite testleri: Kavramsal olarak iki kategoriye (epeyce TDD uygulayıcıları gibi) içine benim test split. Bir birim test bir şey test etmelisiniz, ve ben her an yazıyorum tek sözleşmeye test konusunda disiplinli olmalıdır - genel bir yöntem bir test gerekiyor. Bu ben sırayla küçük sınanabilir sınıfları yazmaya yönelik kılavuz beni eğilimi Hangi içeri güven yüksek derecede küçük, test edilebilir yöntemleri yazmak için beni zorlar.

Entegrasyon testleri aksi ünite testleri ile izolasyon beklendiği gibi çalışmak için kanıtlanmış bileşenleri arasındaki etkileşim kaygıları kanıtlamak üst düzey testlerdir. Ben bu daha az yazmak ve onlar tam entegrasyon düzeyi kapsama söz konusu olamaz gibi, mantıklı uygulanması gerekmektedir. Bu çeşitli bileşenler arasındaki etkileşimin riskli alanları kanıtlayan odaklanmak, ve bir rehber olarak yazılır kabul testleri kullanabilirsiniz.

Entegrasyon test ihtiyacı belirlenmesi alanlar 'hissi' şey daha. Eğer birim testler konusunda disiplinli olduysan, sen entegrasyon test ihtiyacı olan iyi bir fikir olmalıdır, yani, bilirsin derin çağrı yığınları veya çapraz süreç etkileşimi veya benzeri ile bu alanlarda yüksek bir risk var. Veya, entegrasyon testleri ürün sahibinin yazılı şartlar üzerine Haritayı yüksek düzeyde davranışsal beklentileri kanıtlamak için iyi bir yoldur karar verebilir. Bu da iyi bir kullanımıdır.

Evet, dört testten içine bu ayrılmalıyız. Belki de kod çoğaltmak çünkü isteksizdir. Ben birim testleri very okunabilir (Özür dilerim, ben bir başvuru yok) olması gerektiğini savundu bir makale okudum. Bunu yapmak için yollarını tartışmak için gitti, ama bunun özü yarar fonksiyonları yazmak oldu.