oop - 通过其他测试类对类进行单元测试

标签 oop unit-testing tdd

假设我正在使用 TDD 创建一些 A 类。在我完成并有一个“绿色”条之后,我决定我想使用一些重构工具从 A 类中提取一些只有静态方法的 B 类。我现在对 A 类和 B 类都进行了完全单元测试,但只能通过 A 类的测试类。我现在是否还应该创建一个特定于 B 类功能的测试类,即使那会重复测试?

最佳答案

与往常一样,这取决于您的上下文。你在乎什么?

整体行为

如果您正在构建一个供内部使用的系统,或者甚至是一个公共(public)(Web)服务,那么您要发布的软件就是整个系统,那么您不必太在意单个类。 如果您正在构建一个系统,请测试该系统。

只要它被测试覆盖,您就知道您的系统行为正确。但是,您可能会遇到这样的情况,几个月后您意识到您不再需要原来的 A。类,因此您删除它及其相应的单元测试。这可能会导致 B 的测试覆盖率下降,因此密切关注代码覆盖率趋势可能是个好主意。

单位行为

如果您正在构建一个(类)库或框架,则您将每个公共(public)类作为产品的一部分提供。如果您的库有多个用户,则需要开始考虑如何避免破坏性更改。

避免破坏性更改的最有效方法之一是通过单元测试覆盖每个类。只要你don't change the tests ,您知道如果所有测试都是绿色的,则不太可能发生重大更改。但是,这要求您测试所有公共(public)类和成员。

因此,如果您提取 B对于公共(public)类,它现在是其他消费者可能依赖的类,如果你改变它,那将是一个重大的改变。因此,您应该用新的测试来覆盖它。 如果您正在构建一个单元,请测试该单元。

关于oop - 通过其他测试类对类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282423/

相关文章:

javascript - jquery oop 覆盖方法函数

unit-testing - 如何在 Dart 中测试抛出异常的函数?

c++ - 对在 C++ 中测试接口(interface)实现方法感到困惑。我该如何测试它?

database - 使用 Delphi 进行数据库开发的最佳实践是什么?

oop - 如果只有一个实现,我是否需要一个接口(interface)?

java - 没有 java.lang.Object 作为父类(super class)的类

c# - 通过访问数据库来测试 Entity Framework 数据

ruby-on-rails - 使用 capistrano 在部署时自动运行测试

Android Gradle Dependency 与 Android 提供的内部版本冲突

javascript - 测试 react : Target Container is not a DOM element