【问题标题】:Asserting no methods were called断言没有调用任何方法
【发布时间】:2015-04-02 14:55:28
【问题描述】:

如何断言没有调用存根/模拟对象的任何方法?对于单个方法,它相当简单,只需调用Stub(x => x.METHOD()).Repeat.Never(),但如果您有一堆方法或大量重载方法,它会变得不方便。

有没有一个巧妙的解决方法?

【问题讨论】:

  • 你应该能够创建一个没有期望的严格模拟——在其上调用任何东西都会导致违反期望。
  • @Lee - 谢谢,这就是我在提出问题后真正尝试过的,它对我来说是一种魅力。无论如何,如果您想编辑您的回复,使其显示为答案而不是评论,那么我会接受它

标签: c# unit-testing rhino-mocks


【解决方案1】:

我并没有真正使用过 rhino-mocks,但是正如 @Lee 在他的评论中所建议的那样,您应该能够在使用 StrictMock 之后达到您所需要的效果,而无需任何其他期望。因此,给定以下测试:

public void TestStrickMock() {        
    var mockRepo = new MockRepository();

    // Create a StrictMock for the IDummy interface
    var mock = mockRepo.StrictMock<IDummy>();

    // Switch the mode of the mock repo from record to replay
    mockRepo.ReplayAll();

    // Invoke one of the methods on our mocked instance
    mock.Method1();
}

此测试将失败,因为调用了Method1,而没有设置调用预期。它失败并出现错误:

TestSrickMock:Rhino.Mocks.Exceptions.ExpectationViolationException : IDummy.Method1();预期 #0,实际 #1。

【讨论】:

    【解决方案2】:

    正如其他人所说,使用StrictMock

    通过了。

    var mockFoo = MockRepository.GenerateStrictMock<IFoo>();
    mockFoo.VerifyAllExpectations();
    

    这失败了。

    var mockFoo = MockRepository.GenerateStrictMock<IFoo>();
    mockFoo.Bar();
    mockFoo.VerifyAllExpectations();
    

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多