如果条件满足,如何测试void方法返回

时间:2012-04-12 01:04:12

标签: c# unit-testing rhino-mocks

如何测试?

public void TestMethod()
{
   if(aDenpendency.someMethod()) return;

   // Followed by other logic....
}

我在以下逻辑中没有其他依赖项,因此我无法使用AssertWasNotCalled。

提前致谢!!

2 个答案:

答案 0 :(得分:4)

正如您所描述的那样,测试是错误的。并且表示代码结构不佳并且是一个明确的代码气味,你应该重构并对该代码进行单元测试,鉴于你的目标是测试它没有被调用它跟着你也想要一个测试调用。

你需要让一个方法有一个单一的责任,因此对于更合理的单元测试,你可以在返回包含它的方法中取出逻辑并单元测试该方法的输出。

单元测试不是为了测试未被调用的内容,它是通过模拟/假测试期望设置还是应该测试操作的结果。

一旦调用了方法,你就可以编写一个测试对象状态的测试,但这实际上是一个集成测试而不是单元测试。这意味着您可以在返回语句执行后测试应该处于的状态,其他代码将不会执行,因此修改或处理的任何内容都不会被修改。

答案 1 :(得分:0)

如果您正在测试的方法设置了“状态”'属性如运行\处理\中止等?

所以你可以在你设置的任何测试情况下调用你的void方法,然后检查属性。回报;和状态属性设置将在代码中一起

if(condition){
    _status = 1; //Or use an enumeration would be better
    return;
}

然后,您的测试将通过公共访问者测试状态。

这可能并不适合所有情况,但我正在考虑做类似这样的事情,我的类有一个void方法Process()。它可能会让你的测试变得更简单,你不需要模拟(但可能还需要存根)并且意味着你可以积极地测试是否发生了DID而不是DIDN发生的事情(我同意之前的海报,在可能的情况下,这是一种更好的方法)

我意识到编写代码可能只是为了允许测试,但在我的特定情况下,我将使用公共属性在实际运行代码期间检查类的状态,因此整个方法与整体设计一致