【问题标题】:Rhino Mock 3.6 Repository Expected #0, Actual#1Rhino Mock 3.6 存储库预期 #0,实际 #1
【发布时间】:2011-01-21 20:30:45
【问题描述】:

我正在使用 Rhino Mock 3.6 Repository 和 Nhibernate。但我得到了 ExpectationViolationException Expected#0,Actual #1。我已经花了两天时间。我不知道我做错了什么。这是我的代码。我在 mockRepository.Save(user) 行上遇到错误。

        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);

提前致谢。

谢谢 伊姆兰

【问题讨论】:

    标签: rhino-mocks rhino


    【解决方案1】:

    您正在使用 StrickMock,这意味着唯一被视为有效的调用是您为其设置 Expectations 的调用。由于您没有设置将调用 Save 的期望,因此您会收到错误消息。

    【讨论】:

      【解决方案2】:

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

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

      Expect.Call(user.Validate()).Return(validationResults).Repeat.Twice();

      【讨论】:

        【解决方案3】:

        您似乎在嘲笑一切,即使是 sut 即 userrepository 您应该在将在用户存储库中使用的接口上设置模拟。您需要将它们传递给用户存储库以某种方式覆盖它们的默认行为。

        你需要决定你真正想要测试什么。

        上面的代码对我来说意味着以下内容

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

        这只是一个猜测,但重点是,如果您的目的是测试在 userrepository.save 方法中调用了 validate 方法,那么您当前拥有的代码应该只是模拟用户

        【讨论】:

        • 您可能还想查看 rhino mocks 的 AAA 语法,它更容易理解
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        相关资源
        最近更新 更多