Sınıf içi çağrıların olağan olduğu bir proje üzerinde çalışıyorum ancak sonuçlar birçok kez basit değerlerdir. Örnek ( gerçek kod değil ):
public boolean findError(Set<Thing1> set1, Set<Thing2> set2) {
if (!checkFirstCondition(set1, set2)) {
return false;
}
if (!checkSecondCondition(set1, set2)) {
return false;
}
return true;
}
Sadece kondisyon sistemini test etmek istediğim için bu tür kodlar için birim testleri yazmak gerçekten zor, gerçek koşulların uygulanmasını değil. (Bunu ayrı testlerde yapıyorum.) Aslında koşulları uygulayan fonksiyonlardan geçersem daha iyi olurdu ve testlerde sadece alay ediyorum. Bu yaklaşımla ilgili sorun gürültülüdür: jenerikleri çok kullanıyoruz .
Çalışan bir çözüm; ancak, test edilen nesneyi bir casus yapmak ve dahili işlevlere yapılan çağrıları alay etmektir.
systemUnderTest = Mockito.spy(systemUnderTest);
doReturn(true).when(systemUnderTest).checkFirstCondition(....);
Buradaki endişe, SUT'un uygulamasının etkili bir şekilde değiştirilmiş olması ve testlerin uygulama ile senkronize tutulmasının sorunlu olabileceğidir. Bu doğru mu? Dahili yöntem çağrılarının bu tahribatından kaçınmak için en iyi uygulama var mı?
Bir algoritmanın bölümleri hakkında konuştuğumuzu unutmayın, bu yüzden birkaç sınıfa ayırmak istenen bir karar olmayabilir.