【发布时间】:2012-08-06 21:59:37
【问题描述】:
我的新工作中的测试与我之前遇到的测试完全不同。
当他们编写单元测试时(大概在代码之前),他们会创建一个以“When”开头的类。该名称描述了测试将运行的场景(夹具)。他们将通过代码为每个分支创建子类。类中的所有测试都以“应该”开头,并在运行后测试代码的不同方面。因此,他们将有一种方法来验证每个模拟(DOC)是否被正确调用并检查返回值(如果适用)。我对这种方法有点困惑,因为这意味着每个测试都运行完全相同的执行代码,这似乎很浪费。我想知道是否有类似的技术他们可能已经适应了。一个解释样式及其应该如何实现的链接会很棒。我听起来类似于我见过的一些 BDD 方法。
我还注意到他们已经将重复调用“执行”SUT 移到了设置方法中。当他们期待异常时,这会导致问题,因为他们不能使用内置工具来执行检查(Python unittest 的 assertRaises)。这也意味着将返回值存储为测试类的支持字段。他们还必须存储许多模拟作为支持字段。跨类层次结构很难分辨每个模拟的配置。
他们对代码的测试也略有不同。这真的归结为他们认为的集成测试。他们模拟出任何从被测试函数中窃取上下文的东西。这可能意味着同一类中的私有方法。我一直将模拟限制在可能影响测试结果的资源上,例如数据库、文件系统或日期。我可以看到这种方法的一些价值。但是,现在使用它的方式,我可以看到它导致脆弱的测试(每次代码更改都会中断的测试)。我很担心,因为如果没有集成测试,在这种情况下,您可能会错误地使用第 3 方 API,但您的单元测试仍然会通过。我也想详细了解这种方法。
因此,任何有关在哪里了解有关其中一些方法的更多信息的资源都会很好。我不想因为我不了解他们做事的方式而放弃一个很好的学习机会。我也想停止关注这些方法的负面影响,看看有什么好处。
【问题讨论】:
-
看看 Roy Osherove 的资源 - blog - art of unit testing, BDD
标签: unit-testing tdd bdd