我想为API创建一个Stub,并希望验证服务器返回的API调用和响应.因为我已经实现了WireMock示例:
import org.junit.Rule;
import org.junit.Test;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
public class MockTestDemo {
private static final int WIREMOCK_PORT = 8080;
@Rule
public WireMockRule wireMockRule = new WireMockRule(WIREMOCK_PORT);
@Test
public void exampleTest() {
stubFor(get(urlEqualTo("/login")).withHeader("Accept",equalTo("application/json"))
.willReturn(aResponse().withStatus(200).withBody("Login Success")
.withStatusMessage("Everything was just fine!"))
.willReturn(okJson("{ \"message\": \"Hello\" }")));
verify(getRequestedFor(urlPathEqualTo("http://localhost:8080/login"))
.withHeader("Content-Type",equalTo("application/json"))); }
}
但是低于错误:
06001
如果我评论验证部分然后测试执行成功,我也通过调用http:// localhost:8080 / login验证了相同的邮件并且它成功返回响应?
我在这里缺少什么东西?
最佳答案
在您的代码中,您正在查找响应,然后验证是否已为该存根发出请求.但是,您没有调用端点,因此测试失败.
您需要在验证端点之前调用它.
如果您使用Apache Commons HttpClient,您可以将测试编写为:
@Test
public void exampleTest() throws Exception {
stubFor(get(urlEqualTo("/login")).withHeader("Accept",equalTo("application/json"))
.willReturn(aResponse().withStatus(200).withBody("Login Success")
.withStatusMessage("Everything was just fine!"))
.willReturn(okJson("{ \"message\": \"Hello\" }")));
String url = "http://localhost:8080/login";
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(url);
request.addHeader("Content-Type","application/json");
request.addHeader("Accept","application/json");
HttpResponse response = client.execute(request);
verify(getRequestedFor(urlPathEqualTo("/login"))
.withHeader("Content-Type",equalTo("application/json")));
}