2011-03-30 5 views
8

Aşağıdaki birim testi var: Ben o sahte 0 kez invocked söylüyor çünkü bu konuda kafam karıştıNeden Moq'um hiçbir talepte bulunulmadığını iddia etmiyor, ancak istisnada atılan çağrıyı gösteriyor?

Test method 
MyApp.Tests.Commands.Users.ResetUserPasswordCommandTests.Execute_Sends_Email_To_User 
threw exception: 

Moq.MockException: 
Expected invocation on the mock once, but was 0 times: x => x.Send("", "", "") 

Configured setups: 
x => x.Send(It.Is<String>(y => y == ._user.Email), It.IsAny<String>(), 
    It.IsAny<String>()), Times.Once 

Performed invocations: 
IEmailUtils.Send("[email protected]", "Password Recovery", 
    "Your new password is: 7Xb79Vb9Dt") 

şu istisna mesaj bu çalıştırır

[TestMethod] 
    public void Execute_Sends_Email_To_User() 
    { 
     // Setup 
     InitializeTestEntities(); 
     _mock.Setup(x => x.Send(It.Is<string>(y => y == _user.Email), 
      It.IsAny<string>(), It.IsAny<string>())); 

     // Act 
     new ResetUserPasswordCommand(_unitOfWork, 
      _mock.Object).WithUserId(_user.Id).Execute(); 

     // Verify 
     _mock.Verify(x => x.Send("", "", ""), Times.Once()); 
    } 

olsun yine de başarılı bir çağrı olduğunu gösteriyor. Neyi yanlış yapıyorum? o geçirilen argümanları eşleşmiyor neden

cevap

6

sen nedenle bu o argümanlarla bu yöntemi çağırmadı düşünüyor.

_mock.Verify(x => x.Send(
    It.IsAny<String>(), It.IsAny<String>(), It.IsAny<String>(), Times.Once()); 

gerekir.

Belirli dizeleri sahte yönteme geçirilen emin olun, ama emin olun hala olacak şekilde Kurulum yöntemine anlamı yok size özel durumda

sınamak için çalışıyoruz ne bağlı olacaktır iş. Yalnızca alaylı bir yöntemden bir değer döndürmeniz gerektiğinde, gerçekten Kur'u kullanmanız gerekir.

+0

Bu işe yaradı! 'Kur()' yönteminin anlamı nedir o zaman? – KallDrexx

+4

Kurulum/Doğrulama yöntemi ile Kurulum'u kullanmanızın tek nedeni argümanları döndürmektir. Herhangi bir şey döndürmek zorunda olmadığından, herhangi bir kurulum yoksa bir yöntemin çağrıldığını doğrulayabilirsiniz. Bu etkili bir Stub olur, ancak Rhino Moq'un aksine Kur'u kullanır çünkü bir Mock ile bir Stub arasında gerçekten bir fark yoktur, gerçekten onu nasıl kullanırsınız. Bazı insanlar aynı fikirde olmayabilir, ancak işleri basitleştirir, daha gevşek bir şekilde bağlar ve testler tek bir şeye odaklanabilir ve gerçekleşmesi gereken ya da olmaması gereken bir alay konusu hakkında endişe duymaz. – aqwert

İlgili konular