在模拟对象上调用预期方法后,如何立即传递单元测试?

时间:2011-10-25 14:56:55

标签: c# .net unit-testing rhino-mocks

当使用带有模拟对象的Rhino.Mocks时:

一旦调用了预期的方法而没有在调用此预期方法后执行行后,是否有办法传递单元测试?

由于

2 个答案:

答案 0 :(得分:2)

从RhinoMocks 3.5开始,你可以使用漂亮的AssertWasCalled()

this.Service.BuldMessage("messageId");
this.Service.AssertWasCalled(x => x.GenerateMessage("messageId"), messageId));

编辑:回复评论

RhinoMock不负责更改测试执行流程,因此您必须使用NUnit断言, Assert.Pass()实用程序方法允许您立即结束测试,并将其记录为成功:

if (this.Service.AssertWasCalled(...)))
{
   Assert.Pass("well done");
}

PS:正如其他人建议的那样,考虑重新进行单元测试,这会迫使你做出这样的条件测试退出。

答案 1 :(得分:2)

您可以在Rhino.Mocks中使用AssertWasCalled()

如果调用该方法并且不应运行以下行,则期望测试应该停止意味着您已将测试写错了。将断言(Nunit或其他)作为测试的最后一行并拆分测试。你可能正在测试两件事,那不是单元测试。在测试中没有这种分支流程。应该执行测试中的所有行。理想情况下,每个测试应该只有一个断言。

对于您期望的那种流程,您也会失去从测试失败时获得的反馈。通过查看测试名称,您不知道失败了什么。