如何测试?
public void TestMethod()
{
if(aDenpendency.someMethod()) return;
// Followed by other logic....
}
我在以下逻辑中没有其他依赖项,因此我无法使用AssertWasNotCalled。
提前致谢!!
答案 0 :(得分:4)
正如您所描述的那样,测试是错误的。并且表示代码结构不佳并且是一个明确的代码气味,你应该重构并对该代码进行单元测试,鉴于你的目标是测试它没有被调用它跟着你也想要一个测试调用。
你需要让一个方法有一个单一的责任,因此对于更合理的单元测试,你可以在返回包含它的方法中取出逻辑并单元测试该方法的输出。
单元测试不是为了测试未被调用的内容,它是通过模拟/假测试期望设置还是应该测试操作的结果。
一旦调用了方法,你就可以编写一个测试对象状态的测试,但这实际上是一个集成测试而不是单元测试。这意味着您可以在返回语句执行后测试应该处于的状态,其他代码将不会执行,因此修改或处理的任何内容都不会被修改。
答案 1 :(得分:0)
如果您正在测试的方法设置了“状态”'属性如运行\处理\中止等?
所以你可以在你设置的任何测试情况下调用你的void方法,然后检查属性。回报;和状态属性设置将在代码中一起
if(condition){
_status = 1; //Or use an enumeration would be better
return;
}
然后,您的测试将通过公共访问者测试状态。
这可能并不适合所有情况,但我正在考虑做类似这样的事情,我的类有一个void方法Process()。它可能会让你的测试变得更简单,你不需要模拟(但可能还需要存根)并且意味着你可以积极地测试是否发生了DID而不是DIDN发生的事情(我同意之前的海报,在可能的情况下,这是一种更好的方法)
我意识到编写代码可能只是为了允许测试,但在我的特定情况下,我将使用公共属性在实际运行代码期间检查类的状态,因此整个方法与整体设计一致