关于Arrange-Act-Assert的经典测试模式,我经常发现自己在 Act 之前添加了反断言。这样我就知道传递的断言确实是作为操作的结果传递的。
我认为它类似于红绿重构中的红色,只有当我在测试过程中看到红色条时,我才知道绿色条意味着我已经编写了使一个区别。如果我编写了一个通过测试,那么任何代码都可以满足它;类似地,对于 Arrange-Assert-Act-Assert,如果我的第一个断言失败,我知道任何法案都会通过最终的断言 - 因此它实际上并没有验证有关该法案的任何内容。
您的测试遵循这种模式吗?为什么或为什么不?
更新澄清:初始断言本质上与最终断言相反。这并不是断言 Arrange 有效;而是说 Arrange 有效。这是一项法案尚未生效的断言。
最佳答案
这不是最常见的事情,但仍然很常见,有自己的名字。这种技术称为“Guard Assertion”。您可以在 Gerard Meszaros 所著的优秀书籍 xUnit Test Patterns(强烈推荐)中的第 490 页找到它的详细描述。
通常,我自己不会使用这种模式,因为我发现编写一个特定的测试来验证我认为需要确保的任何前提条件更为正确。如果前提条件失败,这样的测试应该总是失败,这意味着我不需要将它嵌入到所有其他测试中。这可以更好地隔离关注点,因为一个测试用例仅验证一件事。
给定的测试用例可能需要满足许多先决条件,因此您可能需要多个防护断言。不必在所有测试中重复这些测试,而是为每个先决条件进行一个(且仅一个)测试,从而使您的测试代码更易于维护,因为这样您的重复次数就会减少。
关于unit-testing - 应该是 "Arrange-Assert-Act-Assert"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1021007/