JUnit参数化测试Json / Text

时间:2019-02-14 09:30:15

标签: junit5

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

@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"));
}

1 个答案:

答案 0 :(得分:0)

这两个测试仅在最后一个断言(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);
    }

}