【问题标题】:create maven junit test library for a module为模块创建 maven junit 测试库
【发布时间】: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 并使用唯一范围内的测试...最简单的解决方案..

标签: java maven junit


【解决方案1】:

不可能。请参阅this。更具体地说,

这里的问题是根据设计测试依赖项不是传递性的

我们面临类似的问题并创建了将类保存在 src/main 中的测试基础设施项目。从长远来看,这被证明是有用的,因为它可以更好地隔离项目。

如果您想坚持当前的方式,那么您只需复制依赖项或将其保存在父 pom 中。

【讨论】:

  • 谢谢。这就是我所害怕的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 2011-07-02
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多