如果满足条件,如何测试 void 方法返回
本文关键字:测试 void 方法 返回 条件 满足 何测试 如果 | 更新日期: 2023-09-27 18:30:53
如何测试这个?
public void TestMethod()
{
if(aDenpendency.someMethod()) return;
// Followed by other logic....
}
我在以下逻辑中没有另一个依赖项,所以我无法使用 AssertWasNotCalled。
提前感谢!!
按照您的描述进行测试是错误的。并且表示代码结构不佳,并且是确定的代码气味,您应该重构并单元测试该代码,鉴于您的目标是测试它尚未被调用,因此您还希望在调用它时进行测试。
你需要有一个方法有一个单一的责任,因此为了更明智的单元测试,你可以在返回后取出逻辑,将其包裹在一个方法中,并对该方法的输出进行单元测试。
单元测试不是用来测试未调用的内容,而是通过模拟/伪造来测试期望设置,或者您应该测试操作的结果。
您可以编写一个测试,在调用方法后测试对象的状态,但这实际上是一个集成测试,而不是单元测试。这意味着您可以测试在 return 语句执行后的状态,其他代码将不会执行,因此修改或进程的任何内容都不会被修改。
让您正在测试的方法设置"状态"属性怎么样,例如正在运行''处理''中止等?
因此,您将在设置的任何测试情况下调用 void 方法,然后检查属性。回报;和状态属性设置将在代码中一起
if(condition){
_status = 1; //Or use an enumeration would be better
return;
}
然后,您的测试将通过公共访问器测试状态。
这可能并非在所有情况下都适用,但我正在考虑在我的类具有 void 方法 Process() 的情况下做这样的事情。它可能会使您的测试更简单,您不需要模拟(但可能仍然需要存根),并且意味着您可以积极测试是否确实发生了某些事情,而不是没有发生的事情(我同意以前的海报,这是在可能的情况下更好的方法)
我意识到这可能有点像编写代码只是为了允许测试,但在我的特殊情况下,我将使用公共属性在实际运行代码期间检查类的状态,以便整个方法与整体设计保持一致。