获取要在 JUnit 5 中执行的测试类列表

Get list of test classes to be executed in JUnit 5

提问人:st0ve 提问时间:2/6/2020 更新时间:2/6/2020 访问量:1771

问:

我的套件中有一个测试,它要求特定类型的日志位于 Azure 的 OMS 资源中。我的方法是在测试运行的一开始就插入这些日志,在执行任何测试之前,并运行最后需要它们的特定测试夹具。我这样做是因为 OMS 的 SLA 不可靠。日志不会立即显示在 Log Analytics 中,它们需要几分钟才能传播。

我的问题是:是否可以查看 TestPlan 对象以查看要运行的类列表?如果我没有运行需要它的夹具,则不需要执行此 OMS 日志注入(例如:运行整个套件的子集、调试单个测试等)。整个测试套件都是使用该命令运行的,我经常使用 intellij 中内置的 JUnit5 运行器执行和调试单个测试mvn clean install

Java Maven 智能 Junit5

评论

0赞 Sormuras 2/6/2020
您不会简单地运行:“mvn clean install”在 2020 年!
0赞 khmarbaise 2/7/2020
我怀疑我是否理解你的问题?你能更详细地解释一下吗?如果我没看错,你的一个测试是特定于环境的/不可知的,这意味着它不是单元测试。对我来说,听起来真的像是集成测试吗?也许我错了......
0赞 st0ve 2/7/2020
这是正确的。这不是单元测试。这是集成级别
0赞 khmarbaise 2/7/2020
所以这意味着你应该相应地命名它,这意味着并通过 maven-failsafe-plugin 通过 ....如果你愿意,你可以忽略结果(参见 maven-failsafe-plugin:verify) ...另一个问题是:这个测试是否需要与其他单元测试不同的依赖关系?如果是,您应该将其移动到不同的模块,以便您有干净的关注点分离......*IT.javamvn clean verify*IT.java

答:

1赞 Sormuras 2/6/2020 #1

在您自己的程序中启动 JUnit 平台,以发现 Jupiter 将执行的所有测试类。这样,你就可以获得每个已注册测试引擎的测试计划的句柄:

LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
    .selectors(
        selectPackage("com.example.mytests"),
        selectClass(MyTestClass.class)
    )
    .filters(
        includeClassNamePatterns(".*Tests")
    )
    .build();

Launcher launcher = LauncherFactory.create();

TestPlan testPlan = launcher.discover(request);

// Examine testPlan for Jupiter-based test classes...

有关详细信息,请参阅 https://junit.org/junit5/docs/current/user-guide/#launcher-api-discovery

不,没有支持试运行模式的 Maven 插件。

评论

0赞 st0ve 2/7/2020
如果可能的话,我想解决这个问题。它适用于 maven,但对 IDE 使用来说会很头疼
1赞 Sormuras 2/7/2020
然后,您应该通过 IntelliJ IDEA 的 YouTrack 系统提出问题。他们可以实施这样的“试运行”......据我看来。