Rhino Mock 3.6 Хранилище Ожидается # 0, факт № 1 - PullRequest
3 голосов
/ 21 января 2011

Я использую Rhino Mock 3.6 Repository и Nhibernate.Но я получаю ExpectationViolationException Expected # 0, Actual # 1.Я потратил на это два дня.Я не знаю, что я делаю не так.Вот мой кодЯ получаю сообщение об ошибке в строке mockRepository.Save (пользователь).

        var username = "abcdef";
        var mocks = new MockRepository();
        var validationResults = new ValidationResults();
        IDataQuery query = mocks.StrictMock<IDataQuery>();
        UserRepository mockRepository = mocks.StrictMock<UserRepository>(query);
        var user = mocks.StrictMock<User>();

        user.FirstName = "javed";
        user.LastName = "ahmad";
        user.UserName = "abc";
        user.Password = "password";
        user.Email = "nadeem@test.com";
        user.IsActive = true;
        user.CreatedBy = 1000000;
        user.CreatedDate = DateTime.Today;
        user.ModifiedBy = 1000000;
        user.ModifiedDate = DateTime.Today;

        Expect.Call(user.Validate()).Return(validationResults);
        mocks.ReplayAll();

        mockRepository.Save(user);

Заранее спасибо.

Спасибо Имран

Ответы [ 3 ]

6 голосов
/ 22 января 2011

Вы используете StrickMock, что означает, что единственными вызовами, которые считаются действительными, являются вызовы, для которых вы устанавливаете Ожидания. Поскольку вы не установили Ожидание, что будет вызываться Save, вы получаете сообщение об ошибке.

1 голос
/ 14 июля 2011

Обычно это означает, что RhinoMock ожидает от вас вызова user.Validate () один раз, но вы вызываете метод дважды. Вы можете либо проверить, что вызываете метод только один раз, либо изменить

Expect.Call (user.Validate ()) Return (validationResults).

до

Expect.Call (user.Validate ()) Возврат (validationResults) .Repeat.Twice ();.

0 голосов
/ 22 января 2011

Похоже, вы издеваетесь над всем, даже с помощью sut, т.е. пользовательского репозитория, который вы должны настраивать на интерфейсах, которые будут использоваться внутри пользовательского репозитория.вам нужно будет передать их в пользовательский репозиторий, чтобы как-то переопределить их поведение по умолчанию.

Вам нужно решить, что вы на самом деле хотите протестировать.

Приведенный выше код подразумевает для меня следующее

class UserRepository
{
  public void Save(IUser user)
  {
    validationResult = user.Validate();
    if (validationResult==null)
    {
      dal.Save(user);
    }
  }
}  

Это всего лишь предположение, но суть в том, что код, который у вас есть, должен издеваться над пользователем только в том случае, если вы хотите проверить, что метод validate вызывается в методе userrepository.save

...