unit-testing - 单元测试检查空值

标签 unit-testing mstest

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

Assert.IsNotNull(variable);

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

var finalVariable = newVariable.AnotherProperty;
Assert.AreEqual(3, finalVariable.Count);

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

那么遇到这种情况一般的解决办法是什么呢?有没有比 3 个测试(每个测试一个断言并在最后 2 个断言之前检查 null 更聪明的方法)?

最佳答案

基本上有两种方法可以解决您的问题:

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

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

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

关于unit-testing - 单元测试检查空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12441565/

相关文章:

java - 用于单元测试的 Intellij IDEA fork 模式变慢

javascript - 如何进行单元测试来查看 Angular 是否未定义?

azure - 如何在 CI 构建 Azure DevOps 中构建单元测试项目以及 'Visual Studio Build' 任务

unity-container - 统一错误 : The given assembly name or codebase was invalid

.net - 如何使用自定义记录器进行 vs 测试?

.net - 将 MStest(从 XML)的结果发送给我的经理

java - 为什么不能同时使用 Mock 和 InjectMocks?

c++ - 忽略 C++ 单元测试

.net - 如何在使用 MS Test 时加载 web.config

c# - 这是使用模拟对存储库进行单元测试的正确方法吗?