SORU
14 AĞUSTOS 2008, PERŞEMBE


Entegrasyon ve birim testleri arasındaki fark nedir?

Ben birim test ve entegrasyon testlerini sözde ders kitabındaki tanımı. Merak ediyorum hangi birim testleri yazmak için zamanı geldiğinde... onları mümkün olduğu sınıfları birçok setleri kapsayacak şekilde yazacağım.

Eğer Kelime bir sınıf varsa, örneğin, Word sınıfı için bazı birim testleri yazacağım. O zaman, başlıyorum yazmaya cümlemi sınıf ve zaman ihtiyacı ile etkileşmek Kelime sınıf, ben sık sık yazmak benim birim testleri gibi bu test her iki Cümle ve Kelime... en azından yerlerde kuruyorlar.

Bu testler aslında onlar şimdi bu 2 Ders entegrasyonu test çünkü entegrasyon testleri olmak zorunda? Yoksa yayılan 2 sınıflar sadece bir birim test?

Genel olarak, çünkü bu belirsiz çizgi, ben nadiren aslında yazmak entegrasyon testleri... ya da benim kullanarak bitmiş ürün görmek eğer tüm parçaları düzgün çalışması gerçek entegrasyon testleri, onlar bile manuel ve nadiren tekrar ötesine kapsamında her özellik?

Entegrasyon testleri yanlış anlama muyum yoksa gerçekten sadece entegrasyon ve birim testleri arasında çok az bir fark var mı?

EDİT: büyük tepkiler herkes için Teşekkürler! Bence gelen çeşitli cevaplar çok açık satır arasında birim ve entegrasyon testleri kesinlikle bulanık bir çizgi, ve belki biraz ukala çalışın ve anlamaya olan ve doğru odaklanmalıdır kalmak kodu (Teşekkürler @Rob Cooper). Ayrıca, üzgünüm ama çok çok iyi çünkü herhangi bir cevap olarak kabul etmeyeceğim, gerçekten öznel görünüyor.

CEVAP
24 EKİM 2011, PAZARTESİ


En önemli fark, bana göre, buentegrasyon testleribir özelliği mi çalışıyor yoksa bir senaryo gerçeğe yakın kod stres beri kırık, biçimdedir. Onlar bir veya daha fazla yazılım yöntemleri veya özellikleri çağırmak ve eğer beklendiği gibi hareket ederlerse test.

Tam tersine, birBirim testtek bir test yöntemi açıkça her bağımlılıkları alay ediyor çünkü yazılımın sonuna doğru çalıştığından sık sık yanlış bir varsayıma dayanmaktadır.

Bir yöntem, bazı özellik uygulamak için bir birim test yeşil olduğunda, bu yüzden, öyledeğilözelliği çalışıyor.

Bir yerde böyle bir yöntem var

public SomeResults DoSomething(someInput) {
  var someResult = [Do your job with someInput];
  Log.TrackTheFactYouDidYourJob();
  return someResults;
}

Bir özelliği yok, tek önemli olan şey. müşteri için çok önemli bir şey yapıyorsun ki: Bu genellikle Salatalık şartname iddia sebepten yazar: arzu . ben^>doğrulamakve . ben^>iletişimçalışma ya da değil özelliği.

Feature: To be able to do something
  In order to do something
  As someone
  I want the system to do this thing

Scenario: A sample one
  Given this situation
  When I do something
  Then what I get is what I was expecting for

Eğer testi geçerse, bir çalışma özelliği, teslim onaylayabilirsiniz. hiç şüphesiz: Bu diyebilirsinİş Değer.

Yazmak isterseniz bir birim test için bir Şey gerekir gibi (kullanarak bazı alay) kalan sınıfları ve yöntemleri çalışma (yani: o, bütün bağımlılıklar yöntemi kullanarak düzgün çalışmıyor) ve onaylama yöntemi çalışıyor.

Pratikte, bir şey yapmak gibi

public SomeResults DoSomething(someInput) {
  var someResult = [Do your job with someInput];
  <b>FakeAlwaysWorkingLog</b>.TrackTheFactYouDidYourJob();
  return someResults;
}

Bağımlılık Enjeksiyon veya Fabrika Yöntemi ya da herhangi bir Sahte Çerçeve veya test edilen sınıfın genişletilmesi Sadece ile bunu yapabilirsiniz.

Günlüğüne bir hata var sanırım.() Bir şey yapıyorsun. Neyse ki, Acur spec onu bulur ve testler başarısız olur baştan sona.

Özelliği, Günlük, [someİnput ile işini Yap] bu kadar iş yapmıyor kırık değil çünkü, çünkü işe yaramaz. Ve, bu arada, [someİnput ile işini Yap] bu yöntem için kendi sorumluluğundadır.

Ayrıca, sanırım Günlük 100 diğer sınıfların 100 diğer yöntemler 100 diğer özellikler kullanılır.

, 100 Yep özellikleri başarısız olur. Ama, neyse ki, 100-baştan sona bir test de başarısız ve sorun ortaya çıkıyor. Ve, evet:doğruyu söylüyorlar.

Çok yararlı bir bilgi oldu: kırık bir ürün olduğunu biliyorum. Ayrıca çok kafa karıştırıcı bir bilgi bana sorunun nerede olduğunu hakkında hiçbir şey anlatmıyor. Bana belirti, kök neden değil iletişim kurar.

Henüz Birşey birim test sahte bir Günlük, bir daha asla kırmak için inşa kullanarak çünkü yeşil. Ve, evet:açıkça yalan söylüyor. Bu kırık bir özelliği iletişim kurmaya çalışıyor. Nasıl yararlı olabilir?

(Bir Şey)'birim test, emin olun başarısız s: [someİnput ile işini Yap] bazı hatalar var.)

Bu kırık bir sınıf ile bir sistem olduğunu varsayalım A system with a broken class

Tek bir hata birkaç özellik bozar ve çeşitli entegrasyon testleri başarısız olur

A single bug will break several features, and several integration tests will fail

Öte yandan, aynı hatayı sadece bir birim test kesilir

The same bug will break just one unit test

Şimdi, iki senaryo karşılaştırın.

Aynı hata sadece bir birim test kesilir

  • Tüm özellikleri kırık Günlüğünü kullanarak kırmızı
  • Tüm ünite tek ünite testi kırmızı, yeşil, testler

Aslında, tüm modülleri kırık bir özelliği kullanarak birim testleri, alay kullanarak, bağımlılıkları kaldırıldı çünkü yeşil. Diğer bir deyişle, tamamen kurgusal ideal bir dünyada çalışır. Ve bu hatalar izole etmek ve onları aramak için tek yoldur. Birim testi alay anlamına gelir. Eğer alay değilse, birim test değil mi.

Fark

Entegrasyon testleri söylene'çalışma değil. Ama yok kullanımdanerede tahminsorun olabilir.

Birim testleri sana tek testneredetam olarak hata değildir. Bu bilgiler, Beraberlik için, tüm diğer bağımlılıklar düzgün çalışması için gereken yerde alay bir ortamda yöntemi çalıştırmanız gerekir.

"Yoksa sadece bir birimdir yayılan 2 sınıfları" bir şekilde yerinden. bu test cümle sanırım bu yüzden Birim testi hiç açıklıklı 2 sınıflar.

Bu cevabı da esasen burada yazdığım şeylerin bir özetidir: Unit tests lie, that's why I love them.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • How to Cook ?

    How to Cook

    31 Ocak 2007
  • Jonathan Morrison

    Jonathan Mor

    24 Mart 2010