unit-testing - 应该是 "Arrange-Assert-Act-Assert"吗?

标签 unit-testing language-agnostic arrange-act-assert

关于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/

相关文章:

c - 单元测试和实现之间的重复代码

ios - 强制 Kiwi 测试失败

c# - 在集成测试中使用 Arrange Act Assert 模式

c# - 单元测试自动实现的属性是否有值(value)

c# - 使用 Arrange-Act-Assert 进行单元测试时是否推荐标题注释?

c# - 列出或发现单元测试未涵盖的方法

python - 如何使用 pytest 测试交互式 python 应用程序

math - float 学坏了吗?

language-agnostic - 对于所有网页设计师 : Academic learning vs self taught learning

algorithm - 将无限值范围缩放到有限区间