假设我有多个java项目,它们都使用maven:projecta和projectb
项目a是一个图书馆
项目b是使用项目a的应用程序
两个项目同时开发。项目a的新需求通过项目b的新版本得到满足。
我主要是手动测试代码,正如预期的那样,产生的代码覆盖率和质量都低于最佳水平。
因此,我目前正在考虑使用junit为我的项目编写测试。由于项目a主要定义接口,我必须——至少我相信是这样——在测试代码中编写这些类的实现。
由于我已经在projectb中定义了这些接口的实现,我想我可以使用projectb作为 test
项目a中的依赖关系,乍一看是非常有意义的,因为项目a中几乎所有的特性都在这些实现中使用,因为我(至少目前)不会在项目a中开发一个在项目b中没有使用的特性(请记住:对于未来的项目,这可能会发生变化,例如新创建的项目c,这也可能取决于项目a)。
另一方面,这将创建某种循环依赖关系。在项目b中 pom.xml
我将定义对项目a的常规依赖,而项目a将在 test
-范围。
因此,有以下问题:
这在技术上是可能的,还是我会从一开始就遇到循环依赖的问题,或者在以后的某个时间点遇到问题(我相信我见过有人做过类似的事情,他们必须在项目a中定义项目a的正确版本 <dependencyManagement>
节以确保在测试时使用当前代码,而不是项目b中定义的版本。我再也找不到了,所以我无法验证这一点,但我记得我很困惑,为什么他们会在那个部分定义自己的项目版本。编辑:我相信我又找到了它,但它似乎是另一回事,我可能只是在研究junit和测试时有点困惑;))
在测试用例的类中使用下游项目是可取的,还是在以后的某个时间点我可能会遇到一些问题(我的第一个想法是,当我用项目b中的第三方依赖项替换项目a时,我会遇到一个问题,因此会丢失项目a的所有测试用例)
1条答案
按热度按时间axkjgtzd1#
不,这不是个好主意。
首先,创建循环依赖项。其次,您不需要测试您想要测试的东西,即项目a(不是项目b)。
那么,你打算怎么做?
首先,思考如果同时开发两个独立的项目a和b,是否真的明智。你可以把它们放到一个多模块的项目中。
其次,如果a主要是接口,那么测试b(与a集成)可能更明智,而不是单独测试a。如果您发现在测试中有值得测试的东西,您可以使用mocking(比如mockito)来模拟测试中出现的接口。