Çalışan bir temel sınıf Çalışan türetilmiş bir sınıf Yöneticim olduğunu ve bu Çalışanın Yönetici tarafından miras alınan bir getEmail () yöntemine sahip olduğunu varsayalım . Bir yöneticinin getEmail () yönteminin davranışının bir çalışanın davranışlarıyla aynı olduğunu test etmeli miyim ?
Bu testler yazıldığı zaman davranış aynı olacaktır, fakat elbette gelecekte bir noktada birileri bu yöntemi geçersiz kılabilir, davranışını değiştirebilir ve bu nedenle başvurumu bozabilir. Ancak karışma kodunun yokluğunu esasen test etmek biraz garip görünüyor .
(Test Manager :: getEmail () yönteminin, Manager :: getEmail () oluşturulup geçersiz kılınana kadar kod kapsamını iyileştirmediğini (veya diğer kod kalite ölçütlerini (?)) İyileştirmediğini unutmayın .)
(Eğer cevap "Evet" ise, baz ve türetilmiş sınıflar arasında paylaşılan testleri yönetme konusunda bazı bilgiler faydalı olacaktır.)
Sorunun eşdeğer bir formülasyonu:
Türetilmiş bir sınıf, bir temel sınıftan bir yöntemi miras alırsa, miras alınan yöntemi şu şekilde beklemenizi isteyip istemediğinizi nasıl ifade edersiniz?
- Tabanın şu anda olduğu gibi davranın (bazın davranışı değişirse, türetilmiş yöntemin davranışı değişmez);
- Her zaman için tam olarak aynı davranışta bulunun (eğer temel sınıfın davranışı değişirse, türetilmiş sınıfın davranışı da değişir); veya
- Ancak istediği gibi davran (bu yöntemin davranışını umursamıyorsun çünkü asla onu çağırmıyorsun).
Manager
sınıftan IMO türetmekEmployee
ilk büyük hataydı.