2011-01-13 20 views
6

Özellikle diğer hizmetler daha modüler uygulanması hale getirmek için tasarlanmış üç diğer hizmetleri bağlayan bir sınıf var ama benim birim test mantığının toplu sahte doğrulama içindedir. Bunu önlemek için yeniden tasarlamanın bir yolu var mı?Çoğunlukla sahte doğrulama bir koku olan bir birim testi mi yapıyor?

Python örneği:

class Input(object): pass 

class Output(object): pass 

class Finder(object): pass 

class Correlator(object): pass 
    def __init__(self, input, output, finder): 
    pass 
    def run(): 
    finder.find(input.GetRows()) 
    output.print(finder) 

Daha sonra, giriş, çıkış ve bulucu taklit gerekir. Başka bir soyutlama yapsam ve Correlator.run() öğesinden bir şey döndürsem bile, yine de sahte olarak test edilmek zorunda kalacak. Sadece birim testini kullanmak için hiçbir neden yok

+1

Tam olarak sorunun nedir? Sekiz bağımlılığa ihtiyaç duyan sınıflarım var ... tasarımınız doğruysa ve soyutlamalarınızın tutarlı olduğunu düşünüyorsanız, kodunuzu değiştirmeyeceğim. – Simone

+0

Beni rahatsız eden şey, sınıfın tek amacının entegrasyon olmasıydı, bu yüzden test etmenin en iyi yolu bir entegrasyon testi olurdu. Her zaman önce bağımsız ünite testleri için uğraştım, ardından mimari olgunlaştıkça entegrasyon testleri yaptım. Tahmin et, sadece bunun olmasına izin vermeliyim. – bluehavana

cevap

2

Sadece kendinize sorun: Tam olarak bu özel test durumu kontrol etmek gerekiyor? Bu kontrol, kukla olmayan diğer sınıflara dayanmazsa, o zaman sorun yok demektir.

Ancak mocks bir sürü sen muhtemelen entegrasyon yapmadan entegrasyonu test çalışıyoruz anlamda bir koku genellikle. Eğer sınıfın atasözüyle sınavı geçmesi durumunda, eğer gerçek derslerle iyi çalışacağını varsayıyorsanız, evet, daha fazla test yapmak zorundasınız.

Şahsen ben hiç birçok Birim testleri yazmayın. Web geliştiricisiyim ve tüm uygulamaların, kullanıcıların istediği gibi HTTP istekleri üzerinden test edilmesini sağlayan fonksiyonel testleri tercih ediyorum. Davan bu büyük hale gelir alaycı seviyesine muyum hızlı bir bakışta

2

- Belki entegrasyon testleri bu durum için daha faydalı olacaktır. Tüm nesneleri düzgün bir şekilde başlatın, ana sınıfı biraz kullanın ve (muhtemelen karmaşık) sonuçlar üzerinde durun. Böylelikle, ara yüzleri, çıktı tahmin edilebilirliğini ve yığınının ötesinde önemli olan diğer şeyleri test edersiniz. Bunu daha önce kullandım ve entegrasyon testi zor olan bir şeyin çok fazla özniteliğe/parametreye veya çok karmaşık/yanlış formatlanmış çıktıya sahip olduğunu buldum.

0

farklı olabilir. Dinamik bir dilde iseniz (örneğiniz Python'da olduğundan bu yana evet kabul ediyorum), üretim sınıflarının alt sınıflarını geçersiz kılınmış ve taklit edilen verileri sunan en sorunlu yöntemlerle oluşturmaya çalışacağım. üretim ve alay edilmiş bir kod karışımı olsun. Kod yolunuz nesneleri başlatmaya izin vermiyorsa, sahte verileri döndüren değiştirme yöntemlerinde monkey patching kullanmayı deneyebilirim.

Hava durumu olsun ya da olmasın, kod kokusu aynı zamanda alay edilen verilerin kalitesine de bağlıdır. Bir hata ayıklayıcısına bırakarak ve bilinen doğru verileri kopyalayıp yapıştırarak veya ağdan koklayarak deneyimlerimi tercih etmenin tercih edilen yoludur.

Entegrasyon ve birim testi de ekonomik bir sorudur: Birim testleri yerine entegrasyon/fonksiyonel testlerle değiştirmek ne kadar acı verici? Sisteminizin ölçeği ne kadar büyük olursa, hafif alaylarla ve dolayısıyla birim testlerle daha çok kazanabilirsiniz.