为测试对象使用依赖项目

时间:2020-12-26 11:46:50

标签: java maven testing dependencies code-coverage

假设我有多个java项目,都使用maven:Project A和Project B

  • 项目 A 是一个图书馆

  • Project B 是一个使用 Project A

    的应用程序

两个项目是同时开发的。 项目 B 的新版本满足了项目 A 的新要求。

我主要是手动测试我的代码 - 正如预期的那样 - 产生的代码覆盖率和质量都低于最佳。

因此,我目前正在考虑使用 Junit 为我的项目编写测试。由于项目 A 主要定义接口,因此我必须——至少我相信是这样——在测试代码中编写这些类的实现。

因为我已经在项目 B 中定义了这些接口的实现,所以我想我可以使用 项目 B 作为 项目 A< 中的 test 依赖项/strong>,乍一看很有意义,因为在这些实现中几乎使用了 Project A 的所有功能,因为我(至少现在)不会在 Project 中开发功能项目 B 中未使用的 A请记住:这可能会在未来的项目中发生变化,例如新创建的项目 C,这也可能取决于项目 A)。

另一方面,这会产生某种循环依赖。在Project Bpom.xml 中,我将定义对Project A 的常规依赖,而Project A 将依赖于项目 Btest 范围内。

因此有以下问题:

  • 这在技术上是可行的,还是我会从一开始或以后遇到循环依赖问题? (我相信我见过有人在做类似的事情,他们必须在 Project A<dependencyManagement> 部分定义正确版本的 Project A确保在测试时使用当前代码,而不是项目 B 中定义的版本。虽然我找不到了,所以我无法验证这一点,但我记得对为什么他们会在该部分定义自己的项目版本编辑:我相信我又找到了它,但它似乎是别的东西,我可能只是在研究 junit 时有点困惑和测试 ;) )
  • 对测试用例的类使用下游项目是可取的,还是我以后可能会遇到的问题? (我的第一个想法是,一旦我将 Project A 替换为 Project B 中的第三方依赖项,我就会遇到问题,因此丢失了我所有的测试用例对于项目 A)

1 个答案:

答案 0 :(得分:3)

不,这不是个好主意。

首先,您创建循环依赖项。其次,你不测试你想测试的东西,即项目A(不是项目B)。

那么,你打算怎么做?

首先,想想如果同时开发两个独立的项目A和B是否真的明智。你可以把它们放到一个多模块项目中。

其次,如果 A 主要是接口,那么测试 B(与 A 集成)可能更明智,而不是单独测试 A。如果您发现 A 中有值得测试的东西,您可以使用 mocking(如 mockito)来模拟测试中出现的接口。