【发布时间】:2017-06-23 17:32:41
【问题描述】:
考虑一个定义抽象类的 maven 实用程序模块(模块 1): AbstractFoo.java。在测试资源下,编写了该类的模型:FooMockup.java。还编写了一个测试类:AbstractFooTest.java。
现在考虑第二个模块(模块 2),它包含一个使用 AbstractFoo 的类,并且还声明了测试用例:Bar.java 和 BarTest.java。 BarTest.java 在创建 Bar 实例的同时创建 FooMockup 实例。
依赖关系很简单。
模块 1 src:不依赖任何东西
模块 1 测试:依赖于模块 1 src
模块 2 src:依赖于模块 1 src
模块 2 测试:依赖于模块 1 和 2 src 以及模块 1 测试
这里没有循环依赖。使用maven时会出现问题。 Maven 提供了两种导入测试依赖的方式:https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html
如果我使用“简单的方式”,那么 maven 拒绝管理传递依赖,这既不容易也不可取。要使用“首选方式”,我必须将模块 1 的测试移动到它自己的模块中。因为模型依赖于模块 1 的 src,而模块 1 的测试依赖于模型,所以我必须将模型与模型保持在同一个包中。 maven 标准是将测试保存在 src/test 下,而不是单独的模块中。因此,这种违反 maven 标准的行为无法与某些 IDE 很好地集成,并且需要在其他 IDE 中进行配置。
除了创建一个自定义的 maven 插件来解决测试范围 jar 的传递测试依赖项之外,有没有办法将 AbstractFooTest 与 AbstractFoo 保持在同一个模块中并让 maven 解决 FooMockup 的传递依赖项?
【问题讨论】:
-
就个人而言,我不会在另一个项目中使用您的测试对象。或者,使用 Mockito 之类的工具快速创建模拟对象。
-
@TedTrippin 谢谢。我知道那个图书馆。为了简洁起见,我给出了我所做的示例。在现实生活中,我实际上不是在使用模型,而是在使用实用程序类。如果可以解决这个简单的案例,我可以将解决方案扩展到我的实际问题。我更喜欢被教钓鱼,而不是被教。 :)
-
那些测试是单元测试吗?
-
@khmarbaise 我们使用标准 junit 来构建单元测试和集成测试 (maven-surefire-plugin/maven-failsafe-plugin)。
-
单元测试位于同一个模块中。集成测试可以在一个单独的模块中...如果您想创建测试包,只需制作一个常用模块,将您的基类等放入
src/main/java并使用唯一范围内的测试...最简单的解决方案..