我新工作的测试与我以前遇到过的测试完全不同。在编写单元测试时(很可能是在编写代码之前),他们创建了一个以“When”开头的类。其名称描述了测试运行情况下的场景(测试对象)。他们将为代码中的每个分支创建子类。该类中的所有测试都以“should”开头,并在运行后测试代码的不同方面。因此,他们将为验证每个模拟(DOC)正确调用和检查返回值(如果适用)的每个测试方法运行相同的执行代码。但这似乎很浪费,会导致混乱。我想知道他们是否使用了类似的技术。对于这种风格及其应该如何实施的链接将是很好的资源。它听起来类似于我见过的某些BDD方法。
我还注意到,他们已经将“执行”SUT的重复调用移到了设置方法中。这会导致问题,因为当他们期望发生异常时,无法使用内置工具进行检查(Python unittest的assertRaises)。这还意味着将返回值存储为测试类的支持字段。他们还必须将许多模拟存储为支持字段。跨类层次结构,这变得很难确定每个模拟的配置。
他们也以稍微不同的方式测试代码。这实际上取决于他们认为什么是集成测试。他们模拟一切会从正在测试的函数中夺走上下文的内容。这可能意味着同一类中的私有方法。我一直将模拟限制在可能影响测试结果的资源上,例如数据库、文件系统或日期。我可以看到这种方法的一些价值。但是,现在正在使用的方式,我可以看到它会导致脆弱的测试(每次代码更改都会破坏测试)。我担心因为在这种情况下没有集成测试,你可能会错误地使用第三方API,但您的单元测试仍然可以通过。我想了解更多关于这种方法的信息。
因此,如果有任何关于更多了解这些方法的资源,那肯定是好的。我不想因为不理解他们的做法而放弃学习机会。我也希望停止关注这些方法的负面影响,并看看其好处所在。
我还注意到,他们已经将“执行”SUT的重复调用移到了设置方法中。这会导致问题,因为当他们期望发生异常时,无法使用内置工具进行检查(Python unittest的assertRaises)。这还意味着将返回值存储为测试类的支持字段。他们还必须将许多模拟存储为支持字段。跨类层次结构,这变得很难确定每个模拟的配置。
他们也以稍微不同的方式测试代码。这实际上取决于他们认为什么是集成测试。他们模拟一切会从正在测试的函数中夺走上下文的内容。这可能意味着同一类中的私有方法。我一直将模拟限制在可能影响测试结果的资源上,例如数据库、文件系统或日期。我可以看到这种方法的一些价值。但是,现在正在使用的方式,我可以看到它会导致脆弱的测试(每次代码更改都会破坏测试)。我担心因为在这种情况下没有集成测试,你可能会错误地使用第三方API,但您的单元测试仍然可以通过。我想了解更多关于这种方法的信息。
因此,如果有任何关于更多了解这些方法的资源,那肯定是好的。我不想因为不理解他们的做法而放弃学习机会。我也希望停止关注这些方法的负面影响,并看看其好处所在。