【问题标题】:Is there a neater way to stipulate a method should not be called in RhinoMocks?有没有更简洁的方法来规定不应在 RhinoMocks 中调用方法?
【发布时间】:2016-11-10 16:41:30
【问题描述】:

给定一个接口如下:

interface ISomething
{
  void Method(int arg1, string arg2, double arg3, OtherType arg4);
}

用于与 RhinoMocks 进行模拟

ISomething something = MockRepository.GenerateMock<ISomething>();

我知道在我的测试中从未调用过的唯一方法如下:

something.Expect(_ => _.Method(
 Arg<int>.Is.Anything,
 Arg<string>.Is.Anything,
 Arg<double>.Is.Anything,
 Arg<OtherType>.Is.Anything)
).Repeat.Never();

这太丑了。对于根本不调用方法的特殊情况,是否有更短的方法来执行此操作?

【问题讨论】:

  • 你可以存根它抛出一个异常。
  • someting.AssertWasNotCalled(s =&gt; s.Method(...))?
  • 使用Arg 是不可能的。如果有太多参数是问题,那么这意味着问题出在方法的设计上(代码味道)。测试的问题往往会揭示代码设计的问题。干净的代码导致干净的单元测试

标签: .net unit-testing mocking rhino-mocks


【解决方案1】:

使用IgnoreArguments() 比单独指定每个参数要快:

something.Expect(_ => _.Method(0, "", 0, null)).IgnoreArguments().Repeat.Never();

【讨论】:

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