如果一个方法已经被另一个测试覆盖,那么为一个方法编写附加测试是否有意义?

Does it make sense to write addition test for a method if it is already covered by another test?

我正在使用单元测试测试我的 spring 启动应用程序,在覆盖率报告中,我的分支覆盖率 +85%。在某些情况下,在测试映射器、实用程序方法等其他方法时会覆盖某些方法

例如,在服务方法中,我调用了映射器和实用程序方法,这些方法被标记为已覆盖在覆盖率报告中,因为我测试了该服务方法。

我的问题是,为那些映射器和实用程序方法编写额外的测试是否有意义,因为它们已经包含在服务测试中?

我通常会采用不同的方法来分享。

比如说,我是一名开发人员,负责创建映射器或实用程序。 此时该服务甚至不存在。

我写了我的代码,但后来我想检查自己。所以我对它进行了单元测试。在这一点上我不关心覆盖范围,对我来说,覆盖范围是一种工具,可以帮助我理解和决定我是否已经完成了我需要的所有检查,或者我错过了 Mapper 代码中的一个区域,我写的可能有错误。

所以我确定我的代码是完美的,我提交它并转到另一个任务...

之后(数周、数月、数年)某人(我或其他程序员)创建了一个使用我的代码的服务。例如,让我们假装是你。

所以你基本上不关心映射代码,你假设它有效。但是,您确实想检查您的服务,因此您编写的单元测试可以模拟对 Mapper 的依赖性,或者如果它不是真正的依赖性并且它的速度和一切都在测试中 运行 它。同样,您不关心整体覆盖率,您关心的是您的代码,您希望确保您的代码没有错误,而且,覆盖率再次帮助您确保您已尽最大努力检查您的代码在它满足生产之前。

至于我对 Mapper 的旧测试 - 嗯,它们仍然是 运行。

底线我认为不应该为了覆盖而覆盖代码,但如果您愿意,测试(和覆盖)应该为您提供一个安全网。

考虑到这一点,您应该为您的代码编写测试,如果您可以模拟其他依赖项,如果不能 - 只是 运行 它们。

P.S。相信大家对此会有很多不同的看法,所以这个问题没有一个正确答案

不要将单元测试写入 "cover code"。
编写单元测试以验证行为
执行某一行生产代码的测试数量没有任何意义。

单元测试也测试一个单元(任意一段代码)孤立。这意味着如果 待测代码 使用其他单元作为 dependencies 这些其他单元应该被 test doubles(例如存根、假货或模拟)在单元测试期间。

当然可以。单元测试不仅仅是为了覆盖。覆盖范围是其中的一部分。您的主要目标是编写单元测试以避免或最小化来自测试人员或生产的错误。 您应该使用各种负面场景和正面场景来测试您的功能。 除了这些你应该测试你的代码的边界条件。