2013-09-04 11 views
9

olarak adlandırılmıştır Şu anda Birim sınamalarını kullanarak birim sınamaları yazıyor ve bağımlılık alay ediyorum. Bunu yaparken ben şöyle bir Mock yarattık:Alter Mock <IType> nesnesi .Object özelliği

Ancak sonra ben alay biraz daha bu yüzden tekrar Mock nesne üzerinde Setup diyoruz davranışını değiştirmek istediğiniz üzerinde
Mock<ITraceProvider> traceProviderMock = new Mock<ITraceProvider>(); 
traceProviderMock.Setup(x => x.GetTraceContext(It.IsAny<string>())).Returns("test"); 
ITraceProvider traceObj = traceProviderMock.Object; 

:

traceProviderMock.Setup(x => x.GetTracer(It.IsAny<string>())).Returns("tracer"); 

Şimdi tekrar traceProviderMock.Object'u çağırmadan, bu yeni sahte davranış traceObj'da mı yansıtılacak? Bu durumda olmak istediğim şey budur.

Bu kesinlikle Verify() yöntemiyle çalışır, ancak Setup yöntemi için görünmez.

Bunu yapmak istememin nedeni, takılı bir bağımlılık kullanarak Test Kurulumu yönteminde tam bağımlılık grafiği oluşturduğum gerçeğinden kaynaklanmaktadır. Sadece benim özel testimin alay konusu bağımlılıklarından birinin davranışını değiştirmek istiyorum. Sonraki testler aynı zamanda alaylı bağımlılığa kendi uzmanlıklarını da uygulayacaktır.

+0

'GetTracer' yöntemi test kurulum yönteminizde ayarlandı mı? –

+0

Hayır, belirli bir test yönteminde Kur. Bu mantıklı olursa Mock için özel uzmanlık testidir. –

+0

Bunu bir test yaptım ve benim için çalıştı. 'TraceProviderMock' nesnesini aldıktan sonra 'GetTracer' yöntemini kurabilir ve beklenen değeri döndürdü. İddiaların doğru kurulduğundan emin misin? Henüz yapmadıysanız, hata ayıklayıcısındaki koddan geçebilir misiniz? –

cevap

14

Bu davranış aslında beklediğim gibi çalışıyor. Testimle ilgili bir sorun nedeniyle, yeni alay konusu yöntemi aramadım. Bu, alay çerçevesinin hareket etmediğine inanmamı yanlış yönlendiriyor.

Özetlemek için, sahte sonra değiştirebilirsiniz. Nesne çağrıldı ve değişiklikler alay nesnede yansıtılır.

+0

Moq'un neden doğru davranmadığını merak ederek, bunu okuyana kadar, bana biraz mütevazi pasta denememi hatırlattı. Bağımlı nesneyi kontrol etti ve Mock.Object'in beklendiği gibi çıkmadığı ortaya çıktı ... benim hatam. – Sully