3

如何测试这个?

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

   // Followed by other logic....
}

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

提前致谢!!

4

2 回答 2

4

按照您的描述进行测试是错误的。并且表示代码结构不佳并且是明确的代码气味,您应该重构和单元测试该代码,鉴于您的目标是测试它没有被调用,因此您还需要在它被调用时进行测试。

您需要一个方法具有单一职责,因此对于更明智的单元测试,您可以取出返回后的逻辑将其封装在一个方法中并对该方法的输出进行单元测试。

单元测试不是为了测试未被调用的内容,而是为了测试模拟/假的期望设置,或者您应该测试操作的结果。

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

于 2012-04-12T20:52:53.993 回答
0

让您正在测试的方法设置一个“状态”属性怎么样?例如 Running\Processing\Aborted 等?

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

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

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

这可能并不适用于所有情况,但我正在考虑做这样的事情,我的类有一个 void 方法 Process()。它可能会使您的测试更简单,您不需要模拟(但可能仍然需要存根),并且意味着您可以事后测试是否发生了某些事情而不是未发生的事情(我同意之前的海报,这是在可能的情况下采用更好的方法)

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

于 2012-06-19T05:43:46.153 回答