首页 > 解决方案 > 为 DynamicTest 设置测试名称

问题描述

我正在利用DynamicTestJUnit 5.3.0-M1 的功能,并且有一个关于测试名称的展示点我似乎无法弄清楚。

我的期望(对或错)是转换displayNameDynamicTest我习惯于在测试输出中看到的测试名称。

例如,给定以下TestFactory方法

public class RequestAcceptTest {

    private final Proxy.Location proxy = Proxy.location();

    @TestFactory
    Collection<DynamicTest> testAllMimeTypes() {

        final List<DynamicTest> tests = new ArrayList<>();

        for (final Method method : Method.values()) {

            for (final MimeType mimeType : MimeType.values()) {

                final String displayName = String.format("testAccept%svia%s", mimeType.name(), method);
                tests.add(dynamicTest(displayName, () -> {
                    assertAccept(200, method, mimeType);
                }));
            }
        }

        return tests;
    }

我希望看到 maven-surefire-plugin 输出的故障在DynamicTest某处包含 displayName,可能像这样:

[ERROR] Tests run: 6, Failures: 6, Errors: 0, Skipped: 0, Time elapsed: 1,578.898 s <<< FAILURE! - in com.example.prototype.proxy.RequestAcceptTest
[ERROR] testAcceptApplicationJsonviaGET  Time elapsed: 0.013 s  <<< FAILURE!
org.opentest4j.AssertionFailedError
    at com.example.prototype.proxy.RequestAcceptTest.assertAccept(RequestAcceptTest.java:73)
    at com.example.prototype.proxy.RequestAcceptTest.lambda$testAllMimeTypes$0(RequestAcceptTest.java:64)

[ERROR] testAcceptApplicationJsonviaPUT  Time elapsed: 0.001 s  <<< FAILURE!
org.opentest4j.AssertionFailedError
    at com.example.prototype.proxy.RequestAcceptTest.assertAccept(RequestAcceptTest.java:73)
    at com.example.prototype.proxy.RequestAcceptTest.lambda$testAllMimeTypes$0(RequestAcceptTest.java:64)

[ERROR] testAcceptApplicationJsonviaPOST  Time elapsed: 0.001 s  <<< FAILURE!
org.opentest4j.AssertionFailedError
    at com.example.prototype.proxy.RequestAcceptTest.assertAccept(RequestAcceptTest.java:73)
    at com.example.prototype.proxy.RequestAcceptTest.lambda$testAllMimeTypes$0(RequestAcceptTest.java:64)

相反,它是数组索引的。

[ERROR] Tests run: 6, Failures: 6, Errors: 0, Skipped: 0, Time elapsed: 1,578.898 s <<< FAILURE! - in com.example.prototype.proxy.RequestAcceptTest
[ERROR] testAllMimeTypes[1]  Time elapsed: 0.013 s  <<< FAILURE!
org.opentest4j.AssertionFailedError
    at com.example.prototype.proxy.RequestAcceptTest.assertAccept(RequestAcceptTest.java:73)
    at com.example.prototype.proxy.RequestAcceptTest.lambda$testAllMimeTypes$0(RequestAcceptTest.java:64)

[ERROR] testAllMimeTypes[2]  Time elapsed: 0.001 s  <<< FAILURE!
org.opentest4j.AssertionFailedError
    at com.example.prototype.proxy.RequestAcceptTest.assertAccept(RequestAcceptTest.java:73)
    at com.example.prototype.proxy.RequestAcceptTest.lambda$testAllMimeTypes$0(RequestAcceptTest.java:64)

[ERROR] testAllMimeTypes[3]  Time elapsed: 0.001 s  <<< FAILURE!
org.opentest4j.AssertionFailedError
    at com.example.prototype.proxy.RequestAcceptTest.assertAccept(RequestAcceptTest.java:73)
    at com.example.prototype.proxy.RequestAcceptTest.lambda$testAllMimeTypes$0(RequestAcceptTest.java:64)

同样,失败摘要仅显示 lambda 名称,不包含任何对displayName

[INFO] Results:
[INFO] 
[ERROR] Failures: 
[ERROR]   RequestAcceptTest.lambda$testAllMimeTypes$0:64->assertAccept:73
[ERROR]   RequestAcceptTest.lambda$testAllMimeTypes$0:64->assertAccept:73
[ERROR]   RequestAcceptTest.lambda$testAllMimeTypes$0:64->assertAccept:73

实际上,我没有 6 个或 10 个测试,而是 10,000 个。我不在乎如何,但我确实需要一些我控制的信息才能显示在测试输出中。

如果我无法与不经意的观察者交流测试是什么,那么该功能很遗憾无法使用,我可能不得不回到字节码生成测试方法。

我也不知道这是 JUnit 问题还是 Maven-Surefire-Plugin 问题。

标签: maven-surefire-pluginjunit5

解决方案


Maven 收回了万无一失的集成,但尚未与 displayname 集成:( 。https://github.com/junit-team/junit5/issues/990

罗曼


推荐阅读