我现在有一个类似这样的课程:
public class MyClass {
public void Method1(){
if (false) {
Method2();
}
}
public void Method2(){
//do something here
}
}
所以从不调用Method2(我的代码看起来有点不同,但我有if-clause,其值为false,因此不会执行Method2。通过调试检查它是否确定)。我想告诉RhinoMocks我希望调用Method2并且测试失败:
MockRepository mock = new MockRepository();
MyClass presenter = mock.PartialMock<MyClass>();
Expect.Call(() => presenter.Method2()).IgnoreArguments();
mock.ReplayAll();
presenter.Method1();
mock.VerifyAll();
......但测试通过了。
(Expect.Call中lambda表达式的原因是,我的实际Method2有参数)
我的问题:
答案 0 :(得分:3)
正如雅各布的评论所证实的那样,PartialMock
只会嘲笑抽象/虚拟方法,所以你的期望实际上并没有做任何事情。
我个人通常不会在我正在测试的类中模拟出方法。我只是模拟了依赖关系,并通过接口而不是具体的类来表达它们,从而避免了这个问题。
答案 1 :(得分:0)
我认为部分嘲笑具体类有很多价值。比如说你有几个私有方法可以在一个类中调用。你显然需要在测试之前让它们“内部”,但是你想要有一种方法来测试它 - 不需要新的类(在很多情况下这不是正确的解决方案)。
要使此测试失败,您只需将方法2的签名设置为:
public virtual void Method2(){}