对测试对象使用依赖项目
Using a dependent project for test objects
假设我有多个java个项目,它们都使用maven:项目A和项目B
项目 A 是一个库
项目 B 是一个使用 项目 A
的应用程序
两个项目同时开发。 项目 A 的新要求已通过 项目 B 的新版本得到满足。
我主要是手动测试我的代码,正如预期的那样,产生的代码覆盖率和质量都低于最佳水平。
因此,我目前正在考虑使用 Junit 为我的项目编写测试。由于 项目 A 主要定义接口,我将不得不 - 至少我相信 - 在测试代码中编写这些 类 的实现。
因为我已经实现了 Project B 中定义的那些接口,所以我想我可以使用 Project B 作为 test
Project A 中的依赖项,乍一看非常合理,因为在这些实现中几乎使用了 Project A 的所有功能,就像我一样(至少现在)不要在 项目 A 中开发未在 项目 B 中使用的功能(请记住:这未来的项目可能会发生变化,例如 新创建的项目 C,它可能还取决于 项目 A)。
另一方面,这会产生某种循环依赖。在项目B的pom.xml
中,我会定义对项目A的常规依赖,而项目A 将依赖于 test
范围内的 项目 B。
因此提出以下问题:
- 这在技术上是否可行,或者我是否会 运行 从一开始就或在稍后的某个时间点解决循环依赖问题? (我相信我见过有人在做类似的事情,他们必须在 Project A 的
<dependencyManagement>
部分以确保在测试时使用的是当前代码,而不是 项目 B 中定义的版本。 不过我找不到它了,所以我可以' 验证这一点,但我记得对为什么他们会在该部分定义自己的项目版本感到困惑。编辑: 我相信我又找到了它,但似乎换句话说,我可能只是在研究 junit 和测试时有点困惑 ;) )
- 是否需要将 类 的下游项目用于测试用例,或者我是否会在以后的某个时间点遇到问题? (我的第一个想法是,一旦我将 Project A 替换为 Project B[= 中的第三方依赖项,我就会 运行 遇到问题65=],因此我丢失了 Project A)
的所有测试用例
不,这不是个好主意。
首先,你创建了循环依赖。其次,你不测试你想测试的,即项目A(不是项目B)。
那么,你打算怎么办?
首先想想,如果同时开发两个独立的项目A和B是否真的明智。您可以将它们放入多模块项目中。
其次,如果A主要是接口,那么测试B(与A集成)而不是单独测试A可能更明智。如果你发现A中有值得测试的东西,你可以使用mocking(比如mockito)来模拟你测试中出现的接口。
假设我有多个java个项目,它们都使用maven:项目A和项目B
项目 A 是一个库
项目 B 是一个使用 项目 A
的应用程序
两个项目同时开发。 项目 A 的新要求已通过 项目 B 的新版本得到满足。
我主要是手动测试我的代码,正如预期的那样,产生的代码覆盖率和质量都低于最佳水平。
因此,我目前正在考虑使用 Junit 为我的项目编写测试。由于 项目 A 主要定义接口,我将不得不 - 至少我相信 - 在测试代码中编写这些 类 的实现。
因为我已经实现了 Project B 中定义的那些接口,所以我想我可以使用 Project B 作为 test
Project A 中的依赖项,乍一看非常合理,因为在这些实现中几乎使用了 Project A 的所有功能,就像我一样(至少现在)不要在 项目 A 中开发未在 项目 B 中使用的功能(请记住:这未来的项目可能会发生变化,例如 新创建的项目 C,它可能还取决于 项目 A)。
另一方面,这会产生某种循环依赖。在项目B的pom.xml
中,我会定义对项目A的常规依赖,而项目A 将依赖于 test
范围内的 项目 B。
因此提出以下问题:
- 这在技术上是否可行,或者我是否会 运行 从一开始就或在稍后的某个时间点解决循环依赖问题? (我相信我见过有人在做类似的事情,他们必须在 Project A 的
<dependencyManagement>
部分以确保在测试时使用的是当前代码,而不是 项目 B 中定义的版本。 不过我找不到它了,所以我可以' 验证这一点,但我记得对为什么他们会在该部分定义自己的项目版本感到困惑。编辑: 我相信我又找到了它,但似乎换句话说,我可能只是在研究 junit 和测试时有点困惑 ;) ) - 是否需要将 类 的下游项目用于测试用例,或者我是否会在以后的某个时间点遇到问题? (我的第一个想法是,一旦我将 Project A 替换为 Project B[= 中的第三方依赖项,我就会 运行 遇到问题65=],因此我丢失了 Project A) 的所有测试用例
不,这不是个好主意。
首先,你创建了循环依赖。其次,你不测试你想测试的,即项目A(不是项目B)。
那么,你打算怎么办?
首先想想,如果同时开发两个独立的项目A和B是否真的明智。您可以将它们放入多模块项目中。
其次,如果A主要是接口,那么测试B(与A集成)而不是单独测试A可能更明智。如果你发现A中有值得测试的东西,你可以使用mocking(比如mockito)来模拟你测试中出现的接口。