当前位置: 首页 > 知识库问答 >
问题:

Java9+maven+JUnit:测试代码需要自己的module-info.Java吗?

莘翰采
2023-03-14
module com.acme.project {
    require module1;
    require module2;
    ...
}
module prod.module {
    exports com.acme.project to test.module;
}
module test.module {
    requires junit;
    requires prod.module;
}

这就产生了

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project test-java9-modules-junit: Compilation failure: Compilation failure:
[ERROR] /home/rpuch/git/my/test-java9-modules-junit/src/test/java/com/acme/project/GreeterTest.java:[1,1] package exists in another module: prod.module

因为一个包是在两个模块中定义的。所以现在我必须在主模块和测试模块有不同的项目,这不方便。

我觉得我走错了路,一切开始变得很难看。我如何在测试代码中拥有自己的module-info.java,或者没有它我如何实现相同的效果(require等)?

共有1个答案

籍兴文
2023-03-14

模块系统不区分生产代码和测试代码,因此如果您选择模块化测试代码,则prod.moduletest.module不能共享相同的包com.acme.project,如规范中所述:

不干扰--Java编译器、虚拟机和运行时系统必须确保包含同名包的模块之间不会相互干扰。如果两个不同的模块包含相同名称的包,那么从每个模块的角度来看,包中的所有类型和成员都只由该模块定义。一个模块中该包中的代码必须不能访问另一个模块中该包中的包私有类型或成员。

正如Alan Bateman所指出的,Maven编译器插件在编译src/test/java树中的代码时使用了模块系统提供的--patch-module和其他选项,这样测试中的模块就得到了测试类的增强。这也是由Surefire插件在运行测试类时完成的(请参见支持在命名的Java9模块中运行单元测试)。这意味着您不需要将测试代码放置在模块中。

 类似资料:
  • 问题内容: 假设我有一个使用Maven 3和junit的Java项目。有和目录分别包含主要来源和测试来源(所有内容都是标准的)。 现在,我想将项目迁移到Java9。内容表示Java 9模块。有看大约是这样的: 如果测试代码本身需要怎么办?例如,添加对某些模块的依赖关系,该依赖关系仅用于测试,而对于生产代码则不需要。在这种情况下,我必须把以给模块不同的名称。这样,Maven似乎将主源和测试源视为不同

  • 问题内容: 如何为Phone对象模拟对象。 波纹管 谢谢 问题答案: 首先,我要做一些假设。 与无副作用的影响。该是对你并不重要。 这样,您的课程就变成了: 因此,您的测试有两个条件。要么是“测试”,然后返回“完成”,要么不是,然后返回“失败”。 那么如何设置设置为“ ”。可以肯定的是,我们需要能够从测试中设置“名称”。为此,我们需要“注入”它(我们可以通过其他多种方式来实现它,但是我喜欢注入)。

  • 我目前正在使用Jenkins设置一个持续集成工具。每次构建完成时,我都想运行JUnit测试。我的问题是,将要测试的项目都没有使用maven或ant。所以我想知道是否可以在没有maven或ant的情况下运行这些测试,如果可以,我该怎么做? 提前谢谢你的回答

  • 问题内容: 我有一个Maven程序,它可以正常编译。当我运行它时,它不会运行任何测试(在TESTs标头下显示)。 我已经用一个超级简单的设置重新创建了这个问题,我将在下面以及运行时将其包括在内-X。 单元测试可以从eclipse正常运行(都使用其默认的junit软件包,而当我包括maven下载的junit.jar时)。而且可以在下正确创建该类。我在带有Maven 3.0.2和Java 1.6.0_

  • 我在IntelliJ中打开了一个新的Java项目,用Maven作为构建工具,目前有一个类和一个JUnit5测试类。当我指示IntelliJ单独或一起运行测试时,它就可以工作了。但是当我转到终端并点击或从IntelliJ内的Maven窗格中执行相同操作时,它会跳过测试。 然而,与这个类似问题的提问者不同,我没有得到任何错误信息。测试类被找到并编译。我没有同样的问题(不正确的文件命名),他有。 它们是

  • 我有根项目,然后是子模块。这些模块是相互依赖的,当我为一个模块运行maven测试时,它会抛出类未找到异常。 ProjectA --ProjectSubA --ProjectSubB --ProjectSubC(依赖项ProjectA和ProjectB) ProjectSubC有Maven测试,所以当它运行时,类在ProjectSubB和ProjectSubA中。现在如何解决这个问题。