Rhino Mock 3.6 Repository预计#0,实际#1

时间:2011-01-21 20:30:45

标签: rhino-mocks rhino

我正在使用Rhino Mock 3.6 Repository和Nhibernate。但是我得到ExpectationViolationException预期#0,实际#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 个答案:

答案 0 :(得分:6)

您正在使用StrickMock,这意味着唯一被认为有效的呼叫是您为Expectations设置的呼叫。由于您未设置将Save调用的期望,因此您收到错误。

答案 1 :(得分:1)

通常这意味着RhinoMock希望您调用user.Validate()一次,但是您调用该方法两次。您可以检查是否只调用一次方法或更改

  

Expect.Call(user.Validate())返回(validationResults);

  

Expect.Call(user.Validate())返回(validationResults).Repeat.Twice();

答案 2 :(得分:0)

你似乎在嘲笑所有东西,甚至是sut,即userrepository 您应该在将在userrepository中使用的接口上设置模拟。你需要将它们传递给userrepository,以某种方式覆盖它们的默认行为。

您需要决定实际要测试的内容。

上面的代码暗示了以下内容

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

这只是一个猜测,但关键是你目前的代码应该只是模仿用户,如果你打算测试在userrepository.save方法中调用validate方法