【问题标题】:How get results of test in a Dynamic Test in Junit5?如何在 Junit5 的动态测试中获得测试结果?
【发布时间】:2020-03-23 10:00:17
【问题描述】:

我的功能类似于:

@TestFactory
public Stream<DynamicTest> dynamicTest() throws Exception {
    String geocodingAnasJsonTest = properties.getProperty("smart-road.simulator.json.geocoding-it.anas.testSuite.test");
    String endpoint = properties.getProperty("smart-road.simulator.endpoint.anasGeocoding");
    RequestSpecification request = RestAssured.given().header("Authorization", auth);
    request.accept(ContentType.JSON);
    request.contentType(ContentType.JSON);
    JsonNode jsonObjectArray = JsonMappingUtil.getJsonFileFromPath(geocodingAnasJsonTest);
    Stream<JsonNode> elementStream = StreamSupport.stream(Spliterators
            .spliteratorUnknownSize(jsonObjectArray.elements(),
                    Spliterator.ORDERED), false);
    return elementStream.map(jsonNode -> DynamicTest.dynamicTest(String.format("Test ID: %s", jsonNode.get("test_name")),
            () -> {request.body(jsonNode.get("request").toString());
                   Response response = request.post(endpoint);
                   int statusCode = response.getStatusCode();
                   boolean res = false;
                   if (statusCode >= 200 && statusCode < 300) {
                     res = true;
                   }
                   try {
                        assertEquals(true, res, properties.getProperty("smart-road.response.smart-road.message.status.ok"));
                        logger.info(properties.getProperty("smart-road.response.smart-road.message.status.ok"));
                        String responseOK=jsonNode.get("response").toString();
                        assertEquals(responseOK, response.asString(), properties.getProperty("smart-road.response.smart-road.message.status.right-end"));
                        logger.info(properties.getProperty("smart-road.response.smart-road.message.status.right-end"));
                   } catch (AssertionFailedError er) {
                        logger.error(properties.getProperty("smart-road.response.smart-road.message.status.assertion-failed"));
                        fail("Test Fallito");
                        Assertions.assertTrue(true);
                   }
            }
            )//fine dynamicTest
    );//fine map
}//fine metodo

我有 20 个孩子测试。 我在 main 中运行测试:

SummaryGeneratingListener listener = new SummaryGeneratingListener();
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                .selectors(selectMethod(Test.class,"dynamicTest"))
                .build();

        Launcher launcher = LauncherFactory.create();
        launcher.registerTestExecutionListeners(listener);
        launcher.execute(request);

现在使用 summary= listener.getSummary() 我不会读取所有测试结果,而只会计算失败或成功测试。

我如何读取所有测试的所有失败/成功结果? 我想要一张这样的地图:

TEST_ID - RESULTS
test0001   Success
test0002   Fail
test0003   Success
test0004   Success
test0005   Fail

我怎么得到这个?有可能吗? 谢谢 问候

【问题讨论】:

  • 我不确定你想做什么,因为你的解释对我来说太混乱了。也许它可以帮助您知道 @TestFactory 应该创建单独的测试。结果报告和总结由 Jupiter 自己完成。
  • 我有一个 TestFactory(Junit5 中的动态测试),它对 Json 运行 20 个动态测试。我想得到这 20 次测试的结果。如何?总之,我只计算成功/失败而不是带有 testID 的详细描述 - 结果:
  • 我已经重写了我的问题.. 是否可以参加所有测试/结果?我只能得到 countFailure、countSuccess() 和 getListFailures 但没有 getListSuccess ..
  • 您是否有理由使用启动器而不是 IDE、Gradle 或 Maven 来运行测试?
  • 是的,因为我必须在另一个应用程序中运行这个测试类..

标签: java listener junit5 summary


【解决方案1】:

一种方法是创建您自己的org.junit.platform.launcher.TestExecutionListener 实现并将其注册到启动器。您可以先查看SummaryGeneratingListener 的源代码。您可以更改executionFinished(..) 以构建测试结果图。这是一个草图:

class MySummaryListener implements TestExecutionListener {
    private Map<String, TestExecutionResult.Status> summary = new HashMap<>();

    @Override
    public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) {
        summary.put(testIdentifier.getDisplayName(), testExecutionResult.getStatus());
    }
}

您可能还想在侦听器中做更多事情,但它应该让您知道从哪里开始。

【讨论】:

  • 谢谢你的意思:“你可能想在监听器中做更多的事情,但它应该让你知道从哪里开始。”?
  • 您可能还想统计不同类型的测试结果或跟踪容器和测试的层次结构等。
猜你喜欢
  • 2017-07-31
  • 2019-05-17
  • 1970-01-01
  • 2022-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
相关资源
最近更新 更多