JUnit 参数化测试 Json/Text

JUnit Paramterized test Json/Text

嗨,我有 2 个测试方法,它们几乎相同,但它们之间有一个区别,我想创建一个具有值源 json 和 text/plain 的参数化测试方法,如何从这两种方法创建参数化测试。

@Test
public void shouldTestReturnWorkInText()
{

    given().header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN_VALUE)
           .when()
           .get(getContextBaseUrl())
           .peek()
           .then()
           .statusCode(HttpStatus.OK.value())
           .body(equalTo("work"));
}

@Test
public void shouldTestReturnWorkInJSON()
{
    given().header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
           .when()
           .get(getContextBaseUrl())
           .peek()
           .then()
           .statusCode(HttpStatus.OK.value())
           .body("message", equalTo("work"));
}

这两个测试仅在最后一个断言 (body()) 上不同,因此您可以提取一个变量直到 statusCode() 表达式,然后根据内容执行特定的 body() 断言作为测试参数提供的类型

@ValueSource(strings = { MediaType.TEXT_PLAIN_VALUE, MediaType.APPLICATION_JSON_VALUE })
void shouldTestReturnWorkFor(String contentType) {

    ValidatableResponse response = given().header(HttpHeaders.ACCEPT, contentType)
            .when()
            .get(getContextBaseUrl())
            .peek()
            .then()
            .statusCode(HttpStatus.OK.value());

    if (contentType.equals(MediaType.APPLICATION_JSON_VALUE)) {
        response.body("message", equalTo("work"));
    } else if (contentType.equals(MediaType.TEXT_PLAIN_VALUE)) {
        response.body(equalTo("work"));
    } else {
        throw new IllegalArgumentException("Unsupported content type: " + contentType);
    }

}