2010-04-10 2 views
2

Как я могу проверить, что «TestProperty» было установлено значение при вызове метода ForgotMyPassword (...)?Rhino Mocks Sample Как исправить свойство

> public interface IUserRepository  
    { 
     User GetUserById(int n); 

    } 
    public interface INotificationSender 
    { 
     void Send(string name); 
     int TestProperty { get; set; } 
    } 

    public class User 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public class LoginController 
    { 
     private readonly IUserRepository repository; 
     private readonly INotificationSender sender; 

     public LoginController(IUserRepository repository, INotificationSender sender) 
     { 
      this.repository = repository; 
      this.sender = sender; 
     } 



     public void ForgotMyPassword(int userId) 
     { 
      User user = repository.GetUserById(userId); 
      sender.Send("Changed password for " + user.Name); 
      sender.TestProperty = 1; 
     } 
    } 

    // Sample test to verify that send was called 
    [Test] 
    public void WhenUserForgetPasswordWillSendNotification_WithConstraints() 
    { 
     var userRepository = MockRepository.GenerateStub<IUserRepository>(); 
     var notificationSender = MockRepository.GenerateStub<INotificationSender>(); 

     userRepository.Stub(x => x.GetUserById(5)).Return(new User { Id = 5, Name = "ayende" }); 

     new LoginController(userRepository, notificationSender).ForgotMyPassword(5); 

     notificationSender.AssertWasCalled(x => x.Send(null), 
      options => options.Constraints(Rhino.Mocks.Constraints.Text.StartsWith("Changed"))); 

     } 

ответ

4
Assert.AreEqual(notificationSender.TestProperty, 1); 
+0

К сожалению Alun, я не обновить, прежде чем я писал один и тот же ответ. +1 – Bermo

+0

> Есть ли способ проверить, что свойство было установлено при вызове метода? Что делать, если свойство было установлено несколько раз? например: public void ForgotMyPassword (int userId) { User user = repository.GetUserById (userId); sender.Send («Изменен пароль для« + user.Name »); sender.TestProperty = 1; Сброс(); sender.TestProperty = 2; Сброс(); sender.TestProperty = 3; } – guazz

+1

Улицы автоматически получают поведение свойства. Я считаю, что вы можете проверить, что свойство было задано с определенным значением в макете, но вызывающий метод, который вы тестируете, вероятно, должен заботиться только о значении TestProperty при возврате метода - я бы увидел это как запах кода. –

1
[TestMethod] 
    public void WhenUserForgetPassword_TestPropertyIsSet() 
    { 
     var userRepository = MockRepository.GenerateStub<IUserRepository>(); 
     var notificationSender = MockRepository.GenerateStub<INotificationSender>(); 

     userRepository.Stub(x => x.GetUserById(Arg<int>.Is.Anything)).Return(new User()); 

     notificationSender.TestProperty = 0; 
     new LoginController(userRepository, notificationSender).ForgotMyPassword(0); 

     Assert.AreEqual(notificationSender.TestProperty, 1); 
    }