Yanıtlar:
GÜNCELLEME : Sürüm 3'ten bu yana yukarıdaki soruya ilişkin güncellemeyi veya Dann'ın aşağıdaki cevabını kontrol edin.
Ya da, alayınızı sıkı yapın, böylece beklemediğiniz bir yöntemi çağırırsanız başarısız olur
new Mock<IMoq>(MockBehavior.Strict)
Ya da, alayınızın gevşek olmasını istiyorsanız, .Throws (Exception)
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
Bir Times.Never
enum seti olan testten sonra bir doğrulama çalıştırın . Örneğin
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
Çalınan: John Foster'ın "Adedi daha iyi anlamak için yardıma ihtiyacım var" sorusuna cevap
Test etmek isteyebileceğiniz şeylerden biri, 65 yaşın üzerindeki bir kişi yönteme geçtiğinde ödeme yönteminin çağrılmamasıdır.
[Test] public void Someone_over_65_does_not_pay_a_pension_contribution() { var mockPensionService = new Mock<IPensionService>(); var person = new Person("test", 66); var calc = new PensionCalculator(mockPensionService.Object); calc.PayPensionContribution(person); mockPensionService.Verify(ps => ps.Pay(It.IsAny<decimal>()), Times.Never()); }
Bu, Moq'un son sürümlerinde çalışmaz (en az 3.1 olduğundan),
Verify
cevapta belirtildiği gibi yöntemde belirtilmelidir.
Aslında, .AtMost(0)
İade ifadesinden sonra belirtmek daha iyidir .
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
Her ne kadar "atar" da çalışır, AtMost(0)
daha etkileyici IMHO.
.AtMostOnce () kullanın;
Gerçek testten sonra, yöntemi tekrar arayın. Bir istisna atarsa çağrıldı.