我想在Eclipse(Oxygen 4.7.1a)中使用JUnit 5创建一个JUnit测试。这个JUnit测试应该在一个名为test的独立src文件夹中。但是,由于我是JUnit和Java9的新手,我遇到了以下问题。
我不想为此使用像Gradle或Maven这样构建工具。
因为我有两个不同的src文件夹,一个用于项目src,另一个用于测试用例:
通常不需要模块化您的测试代码(至少我想不出一个合理的理由,也许有人可以给出一个令人满意的反例)。在src
下的主代码中只能存在一个module-info.java
文件(毕竟,模块化主代码甚至不需要它)。
由于module-info.java
文件只在主源目录中,而不在测试源目录中,因此从逻辑上讲,它不应该依赖于JUnit模块。所以现在的问题变成了如何通过依赖模块(表示被测试系统)和JUnit模块来编译和运行JUnit测试类。
为此,您需要使用javac
和java
提供的新选项:
因此,假设您有以下树:
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特性可能在哪里。我将感谢任何帮助。