当前位置: 首页 > 面试题库 >

在没有Maven或Gradle的情况下将JUnit 5与Java 9结合使用

逄念
2023-03-14
问题内容

说明:

我想在 Eclipse(Oxygen 4.7.1a)中 使用 JUnit 5*
创建一个JUnit测试。此JUnit测试应位于名为Test的单独src文件夹中。但是,当我刚接触JUnit和 Java 9时 ,遇到了以下问题。
__

*

不想 为此使用诸如 Gradle或Maven之 类的构建工具。

问题:

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

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

问题答案:

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

由于该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

(注意:专门针对JUnit 5,您可以使用junit-platform-console-
standalone工件,该工件包含核心JUnit引擎并允许在控制台中运行测试;请参阅用户指南)

然后您可以按以下方式编译代码:

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=.

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

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

my.module即使未在中声明junit,它也仍然需要module-info.java

org.junit.platform.console.standalone自动模块 的名称,它是从Jar清单(与JUnit
5的情况)中派生的,否则是从Jar文件的名称(例如,对于JUnit 4的情况)中派生的。

还要注意,这是Maven在编译和运行单元测试时可能在后台执行的操作(有关手动执行上述操作的等效插件配置,请参阅此问题)。

如果由于某种原因您还希望模块化单元测试该怎么办?

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

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

如果单元测试位于不同的程序包中,则还可以将它们分为两个模块(两个module-info.java),a my.module和a
my.test.module,仅后者需要JUnit。

如果确实在模块中包含测试类,则在上述命令中,您不需要--add-reads--patch-module



 类似资料:
  • 我想在Eclipse(Oxygen 4.7.1a)中使用JUnit 5创建一个JUnit测试。这个JUnit测试应该在一个名为test的独立src文件夹中。但是,由于我是JUnit和Java9的新手,我遇到了以下问题。 我不想为此使用像Gradle或Maven这样构建工具。 因为我有两个不同的src文件夹,一个用于项目src,另一个用于测试用例: 我需要两个module-info.java文件吗?

  • 因此,基本上我正在尝试使用scrapinghub的Crawlera代理,并在windows上使用python的selenium chrome。 我检查了留档,他们建议这样使用Polipo: 1)在 /etc/polipo/config中添加以下行 2) 将此添加到selenium驱动程序 现在我想不使用脊髓灰质炎,直接使用代理。 有没有办法替换polipo_proxy变量并将其更改为crawler

  • 问题内容: 我从Vaadin开始,我想知道在不使用maven的情况下在NetBeans中使用此框架是否可行。原因是使用maven的项目需要很长时间才能下载依赖项,并且由于超时连接问题而无法运行。 我已经下载了“多合一”文件,并尝试按照这些README.txt文件的说明进行操作: 将除vaadin-client和vaadin-client-compiler以外的所有vaadin- *文件复制到项目中

  • 问题内容: 我有多个这样的人 它们不是嵌套的或类似的东西。基本上是不同的领域。我需要像这样在 node.js 中将它们组合为一个: 我可以很好地使用 jQuery 。这是浏览器中的一个工作示例: http://jsfiddle.net/qhoc/agp54/ 但是,如果我在 node.js中 执行此操作,则不希望加载jQuery(这有点用处,加上 node.js的jQuery 在 Windows

  • 我看到的所有解决方案都需要使用。但是,我想在Eclipse之外的单个文件上使用CDT解析器。那有什么办法吗?

  • 问题内容: 我正在尝试使用pyodbc处理一个非常大的查询,我需要遍历所有行,而不必使用fetchall()一次加载所有行。 是否有一个良好且有原则的方法来做到这一点? 问题答案: 当然,请使用循环。 http://code.google.com/p/pyodbc/wiki/Cursor#fetchone