单元测试检查空值

Ива*_*ова 5 unit-testing mstest

这是一个非常基本的问题,但我仍然找不到合适的答案。在我的测试中,有可能有空值,因此最后一个阶段 (Act) 开始看起来有点奇怪(它不再只是行为)。我的意思是:

Assert.IsNotNull(variable);

var newVariable = variable.Property;
Assert.IsNotNull(newVariable);

var finalVariable = newVariable.AnotherProperty;
Assert.AreEqual(3, finalVariable.Count);
Run Code Online (Sandbox Code Playgroud)

现在它们显然是相关的,我必须确保这些值不为空,而且在一个测试中有三个断言,并且行为部分开始看起来不正确。

那么在这种情况下一般的解决方案是什么?有没有比 3 个测试更聪明的事情,每个测试一个断言并在最后 2 个断言之前检查 null?

k.m*_*k.m 2

基本上有两种方法可以处理您的问题:

  1. 保护断言:额外的断言确保数据在进行正确测试之前处于已知状态(这就是您现在正在做的事情)。
  2. 将守卫断言转移到他们自己的测试中。

选择哪个选项很大程度上取决于被测试的代码。如果先决条件在其他测试中重复,则暗示需要采用单独的测试方法。如果前置条件在生产代码中有所反映,则再次提示需要单独的测试方法。

另一方面,如果您只是为了增强信心而做的事情,那么单独的测试可能太多了(但正如其他答案中所述,这可能表明您无法完全控制您的测试,或者您“一次测试太多东西)。