2017-03-31 25 views
5

Her şeyle alay etmenin kötü olduğunu okudum. Mock Everything Is a Good Way to SinkHer şey alay etmeden iyi bir birim testi nasıl yazılır?


Test Smell: Everything is mocked
Ben de Entegrasyon testini birlikte çalışan bütün bir sistem test ederken birimi tek bir bileşen de göz testleri olduğunu okudum.
Writing Great Unit Tests: Best and Worst Practices

Bu beni şaşırtıyor. Anladığım kadarıyla, uygun bir birim testi yazmak için, her şeyi tek bir bileşenle ayırmak gerekir. Test boyunca gerçek nesneler kullanılıyorsa, bu test bir entegrasyon testi haline gelmez mi?

Her şey alay etmeden iyi (yalıtılmış) birim testi nasıl yazılır?

+0

"Her şey" ile ne demek istediğini bilmeden cevap vermek çok zordur. – developer

cevap

4

Mocking model kötü bir koku. Sadece test edilen yöntemin mantığına katılan bağımlılıkları değil, verileri değil. Fakat bu basit kuralla bile, işler her zaman açık değildir. Bazı durumlarda, yöntemin kendi mantık kurallarına sahip olduğu ve aynı zamanda mantığını tamamlamak için gerçekleştirilmesi gereken ayrı bir dış bağımlılığa bir veya iki çağrıya sahip olduğu için, bir yöntemi test eden bir birim doğrudur. Bu durumda alay doğal görünüyor.

Bazı durumlarda, test etme yönteminin çok az mantık kuralına sahip olduğundan birim testi daha az açıktır. Uygulamasında ağırlıklı olarak dışsal bağımlılıkları arar. Bu durumda alay, testin özü alaycı olabileceğinden, gerçekten doğal görünmüyor. Her çağrıda alay ile akış çağrılarının sınanması, beyaz kutunun sınanmasıdır. Yöntem mantığı davranışını test etmediği için kırılgandır. Sadece bir şeyi kanıtlar: kodunuz ne yaparsa yapar. Bu durumda, entegrasyon testlerinin ünite testlerine göre tercih edilmesi gerektiğini düşünüyorum.