簡體   English   中英

如何在 Junit5 的動態測試中獲得測試結果?

[英]How get results of test in a Dynamic Test in Junit5?

我的功能類似於:

@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個孩子測試。 我在主要運行測試:

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

我怎么得到這個? 有可能嗎? 感謝和問候

一種方法是創建自己的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());
    }
}

在偵聽器中您可能還有更多事情要做,但它應該讓您知道從哪里開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM