Я начинаю с теста Pact, и я последовал примеру из Pact-JVM-Example , затем я создал свой собственный тест
Производитель возвращает данные от пользователя (очень простой JSON) {"id": 1, "firstName": "name", "lastName": "last"}
Тест потребителя:
public class HelloControllerTest {
@Rule
public PactProviderRuleMk2 provider = new PactProviderRuleMk2("DemoService", "localhost", 8112, this);
@Pact(consumer = "DemoClient")
public RequestResponsePact createFragment(PactDslWithProvider builder) {
Map<String, String> headers = new HashMap();
headers.put("Content-Type", "application/json");
DslPart userResult = new PactDslJsonBody()
.integerType("id",1)
.stringType("fistName","name")
.stringType("lastName","last")
.asBody();
return builder
.given("There is a user with Id 1")
.uponReceiving("A request for user 1")
.path("/user/1")
.method("GET")
.willRespondWith()
.status(200)
.headers(headers)
.body(userResult).toPact();
}
@Test
@PactVerification()
public void doTest() {
HelloController helloController = new HelloController(provider.getPort());
}
}
ИПотребительский класс выглядит так:
public class HelloController {
int port = 8200;
HelloController(){
// Will use default port.
System.out.println("Default port "+ port);
}
HelloController(int port){
this.port = port;
System.out.println("Custom port "+ port);
}
public boolean getUser(){
try {
String url=String.format("http://localhost:%d/user/%d", port, 1);
System.out.println("using url: " + url);
HttpResponse r = Request.Get(url).execute().returnResponse();
String json = EntityUtils.toString(r.getEntity());
System.out.println("json = " + json);
return true;
}
catch (Exception e) {
System.out.println("Unable to get user");
return false;
}
}
}
Я заметил, что когда я запускаю @Test:
@Test
@PactVerification()
public void doTest() {
HelloController helloController = new HelloController(provider.getPort());
}
, я получаю исключение NullPointerException.
Тест не получает фиктивные данные от провайдера, объявленные в @ Rule
@Rule
public PactProviderRuleMk2 provider = new PactProviderRuleMk2("DemoService", "localhost", 8112, this);
Я не знаю, чего не хватает, почему не обнаруживается провайдер Mock?
Любые предложения, спасибо