【问题标题】:How can I enforce a void method to return Void from a Stub object?如何强制使用 void 方法从 Stub 对象返回 Void?
【发布时间】:2011-12-05 08:48:33
【问题描述】:

如何强制 RhinoMocks 中的存根对象为它的 void 方法返回 void?

举个例子:

public interface ICar 
{
    string Model {get;set;}
    void Horn();
}

ICar stubCar= MockRepository.GenerateStub<ICar>();
stubCar.Expect(c=>c.Horn()).Return( //now what so that 
                                   // it returns nothing as the meth. returns void ? 

【问题讨论】:

  • 如果它定义为 void 返回类型,那么它如何返回任何东西?
  • 我担心的是,如果我不强制它返回 void,对这个存根的调用将引发异常。我试过了,发现:乔恩是对的!

标签: c# unit-testing mocking rhino-mocks


【解决方案1】:

Return() 方法对于 void 方法调用无效。而你想要这样的东西:

ICar stubCar= MockRepository.GenerateStrictMock<ICar>();
stubCar.Expect(c=>c.Horn());
stubCar.DoSomethingThatIsSupposedToCallHorn();
stubCar.VerifyAllExpectations();

它会告诉你Horn() 是否被调用。

这就是您测试单元测试时调用 void 方法的方式。您执行以下操作:

  1. 设置期望 (Expect())
  2. 调用应该调用期望的方法
  3. 验证是否调用了预期的方法。

【讨论】:

  • 我认为这行不通,因为您使用的是 Stub 而不是 Mock,并且 stub 将始终通过 VerifyAllExpectations 请参阅:wrightfully.com/…
  • 这应该是一个严格的模拟。我会改变它。感谢您了解这一点。
【解决方案2】:

方法不能返回一个值 - 它是一个 void 方法。 CLR 不会它尝试返回一个值。您无需对此进行测试。

您只需要Expect 电话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多