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

使用JUnit5和Java9,不使用Maven或Gradle

古明煦
2023-03-14

我想在Eclipse(Oxygen 4.7.1a)中使用JUnit 5创建一个JUnit测试。这个JUnit测试应该在一个名为test的独立src文件夹中。但是,由于我是JUnit和Java9的新手,我遇到了以下问题。

我不想为此使用像Gradle或Maven这样构建工具。

因为我有两个不同的src文件夹,一个用于项目src,另一个用于测试用例:

  • 我需要两个module-info.java文件吗?(每个src文件夹一个)
  • 我的module-info.java文件中需要哪些模块才能使JUnit5工作?

共有1个答案

施慈
2023-03-14

通常不需要模块化您的测试代码(至少我想不出一个合理的理由,也许有人可以给出一个令人满意的反例)。在src下的主代码中只能存在一个module-info.java文件(毕竟,模块化主代码甚至不需要它)。

由于module-info.java文件只在主源目录中,而不在测试源目录中,因此从逻辑上讲,它不应该依赖于JUnit模块。所以现在的问题变成了如何通过依赖模块(表示被测试系统)和JUnit模块来编译和运行JUnit测试类。

为此,您需要使用javacjava提供的新选项:

因此,假设您有以下树:

src
    module-info.java (declares a module called "my.module")
    mypackage
        MyClass.java
test_src
    mypackage
        MyClassTest.java
lib/junit-platform-console-standalone.jar
cd root_dir
javac -d mods/my.module src/module-info.java src/mypackage/MyClass.java

cd test_src
javac -d test_out --module-path ../mods;../lib/junit-platform-console-standalone.jar \
--add-modules org.junit.platform.console.standalone,my.module --patch-module my.module=. \
--add-reads my.module=org.junit.platform.console.standalone mypackage/MyClass.java

并且可以运行已编译的测试类:

cd test_src/test_out
java --module-path=../../mods;../../lib/junit-platform-console-standalone.jar \
--add-modules my.module,org.junit.platform.console.standalone \
--add-reads my.module=org.junit.platform.console.standalone \
--patch-module my.module=. \
--add-opens my.module/test=org.junit.platform.console.standalone \ 
org.junit.platform.console.ConsoleLauncher test.MyClassTest

但这是不使用Maven的代价。我建议您在理解模块路径的概念后,阅读命令文档中的这些选项。这里需要注意的一个重要事项是两个选项:

--patch-module my.module=.

这是需要的,因为示例测试代码具有与模块my.module相同的包(mypackage)。没有它,模块系统就会抱怨。

--add-reads my.module=org.junit.platform.console.standalone

如果出于某种原因,您也想模块化您的单元测试呢?

在这种情况下,由于在上面的示例中,单元测试共享相同的包,所以可以将它们包含在my.module中,并向JUnit添加一个要求:

module my.module {
    exports mypackage;
    requires org.junit.platform.console.standalone;
}

如果单元测试在不同的包中,您还可以将它们拆分为两个模块(两个module-info.java)、一个my.module和一个my.test.module,其中只有后者需要JUnit。

如果您确实在模块中包含了测试类,那么在上面的命令中,您就不需要--add-reads--patch-module

 类似资料:
  • 在成功运行JUnit4测试后,我试图将JUnit5与Gradle一起使用。 而我唯一的测试包含 我觉得这很奇怪! 我的生成文件是 我的文件夹结构是,使用包, 在我使用的IntelliJ2017.1.3中,模块结构如下所示 因为Gradle现在想要源代码和测试在他们自己的包中。 使用gradle在intellij中从JUnit4升级到JUnit5 链接回到上面的问题,并链接到这个Jetbrains博

  • 我正在尝试创建Java9的HelloWorld模块,下面给出了以下步骤。 右键单击项目(即com.hello) 右键单击源文件夹(即com.hello) 右键单击包(即com.hello) 右键单击HelloWorld 启动层初始化期间出错 JAVAlang.module。FindException:模块com。你好,没找到 PS:尝试了这个解决方案后,我的项目结构如下 注意:我还注意到一件事。在

  • 问题内容: Maven执行 我正在尝试使用我的一个Maven项目,但在此阶段无法使用- 我得到的输出是- 尝试实施上述解决方案@ Surefire没有采用Junit5测试来将依赖关系更新为- 并将插件更新为- 但输出保持不变。 问题 -这是自定义提供没有更多的支持,或者是有什么解决方案使用执行测试,和/或 现在? 注意 -测试执行在JUnit-4上运行良好。 问题答案: 您应该像这样配置maven

  • 我正在使用Intellij Idea编译一个使用Maven依赖项的项目,Intellij不断告诉我,由于JavaFX不存在,我的项目有50个错误。 Intellij并没有将代码中的所有javafx依赖项都突出显示为错误,只是当我按下run并编译程序时,程序会表示javafx中的所有内容都不存在。

  • 输出: @InjectMocks没有注入任何内容,因为authManagement为null,因此出现了NullPointerException。有谁能帮我解决这个问题吗。

  • 我遇到了无法使用Maven运行JUnit5测试的问题。在IDE中运行它们工作正常,但使用“mvn测试”会产生以下输出: 这是我的测试课程: pom: 我做了一些研究,我认为这可能与混合JUnit4和JUnit5特性有关,这导致maven surefire插件无法运行测试。然而,我找不到那些剩余的JUnit4特性可能在哪里。我将感谢任何帮助。