FakeItEasy'yi kullanarak, nesnemin yönteminin aynı nesne üzerinde başka bir yöntem mi çağırdığını görmek için nasıl denetlerim?Aynı nesnedeki başka bir yöntemde FakeItEasy's A.CallTo() yöntemini kullan
Testi:
[TestMethod]
public void EatBanana_CallsWillEat()
{
var banana = new Banana();
var myMonkey = new Monkey();
myMonkey.EatBanana(banana);
//this throws an ArgumentException, because myMonkey is a real instance, not a fake
A.CallTo(() => myMonkey.WillEat(banana)
.MustHaveHappened();
}
Sınıf:
public class MyMonkey {
private readonly IMonkeyRepo _monkeyRepo;
public MyMonkey(IMonkeyRepo monkeyRepo) {
_monkeyRepo = monkeyRepo;
}
public void EatBanana(Banana banana) {
//make sure the monkey will eat the banana
if (!this.WillEat(banana)) {
return;
}
//do things here
}
public bool WillEat(Banana banana) {
return !banana.IsRotten;
}
}
Önerilere açığım. Eğer bu konuda yanlış gidersem, lütfen bana bildirin.
Bu, FIE'nin anladığı gibi değil. FIE sahte nesneler sağlar, böylece üretim kodunuz daha kolay dürtülebilir ve üretilebilir. İşaret ettiğin gibi, sende sahte yok. Deneyimlerime göre, bu tür bir test genellikle iyi bir fikir değildir. MyMonkey sınıfınız kendi içinde yeterli bir birim olmalı ve kendi yöntemlerini denemekten endişe etmekten ziyade, bir muz yemeye karar verildiğinde genel davranışını test etmekten daha iyi olursunuz. Örneğin, muzun "burada işler yap" daki ipuçlarından yola çıkarak yediğini söyleyebilecek misiniz? –
@BlairConrad benim gerçek senaryomda WillEat daha karmaşık ve kendi testleri var ve bu da EatBanana'nın sahip olduğu testlerden sadece biri. Bu testte, EatBanana'nın gerçek WillEat'ı aramasına izin verirsem, bir testte iki özelliği test etmeyecek miyim? Sonra, WillEat değiştiyse, bu testi bozabilir, bu kötü bir haber, değil mi? –
Ben senin noktasını görüyorum. Bu zor. Eğer WillEat başka bir nesnede yaşarsa, hepimiz o nesneyi numaralandırmaya ve 'MyMonkey'e (acı verici sesler) enjekte etmeye çağırırız. Tüm söyleyebileceğim en iyi varsayılan pozisyonun, bir müşterinin gözlemlenebilir sonuçlarına dayanarak 'MyMonkey'i dışarıdan test etmeye çalışmak olduğunu düşünüyorum. Ancak, içine düşünce koydunuz ve size acıdan tasarruf edecek bir çözüm buldunuz ve test sayısını ve verilen verilere ayıracak sayıyı azaltıyor. En iyi kodu biliyorsunuz, bu yüzden eğer sizin için çalışıyorsa… Sadece alternatifin farkında olmanızı istedim. –