我目前正在使用放心和 Json-unit 来断言本地 json 文件以针对请求的放心响应。
我目前有一个带有基 uri 的类前方法。
我不知道如何做出这个断言。我正在努力解决 json 单元文档。我需要先输入文件吗?
@Test
public void ApiaryTest1() throws Exception {
when()
.get("/test")
.then()
.statusCode(200);
// compares two JSON documents
assertJsonEquals("expected/test.json", "http://apiary/test");
}
您需要:
- 使用 JsonUnit API 读取资源
- 将响应从放心提取到变量
- 断言你已经在做
例:
Response response = when().get("<url>");
response
.then()
.statusCode(200);
// compares two JSON documents
assertJsonEquals(resource("resource-inside-resources-folder.json"), response.asString());
对于放心的 Kotlin DSL:
When {
get("http://nowjidev1vm01.ath.bskyb.com/calskyplussearch/health")
} Then {
statusCode(200)
} Extract {
assertJsonEquals(expectedBody, response().asString())
}
这比你想象的要容易。Rest Assures 在指定"正文匹配器"的情况下将整个正文作为字符串传递。因此,您可以直接使用json 单元的 jsonEquals匹配器:
import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
public class RestAssuredWithJsonUnit {
@Test
public void test() throws Exception {
given().when().get("/api/service/v1").
then().
statusCode(200).
body(jsonEquals(resource("resource-on-classpath.json")));
}
public static String resource(String resourceName) throws IOException {
Objects.requireNonNull(resourceName, "'null' passed instead of resource name");
return IOUtils.resourceToString(resourceName, UTF_8);
}
请注意"资源"方法的实现。ResourceUtils中提供的那个使用的是系统类加载器,不幸的是,它没有找到我的灵魂。来自commons-io的IOUtils做得很好!