У меня есть пакт-брокер, работающий в облаке AWS. Я вижу некоторое описание, в котором говорится, что "пакт между app-a-service и app-b-service" в некотором примере URL, например, demo.service. aws .cloud / demo-service / latest "показывает взаимодействия. ответ на брокере:
A pact between express-demo-service and spring-demo-service
Requests from express-demo-service to spring-demo-service
Get test envs given tEST_ENV and SECRET_ENV set
Interactions
Given tEST_ENV and SECRET_ENV set, upon receiving get test envs from express-demo-service, with
{
"method": "GET",
"path": "/env",
"headers": {
"Authorization": "Bearer "
}
}
spring-demo-service will respond with:
{
"status": 200,
"headers": {
"Content-Type": "application/json"
},
"body": {
"TEST_ENV": "foo",
"SECRET_ENV": "bar"
}
}
Теперь я создаю свой контроллер остатка Springboot, который возвращает этот ответ, как определено в документации. Как теперь запустить тест, чтобы убедиться, что моя реализация соответствует этим требованиям от брокера pact?
Ниже приведены мои TestPacts, чтобы убедиться, что мои реализации соответствуют контракту от брокера (не уверен, что это правильно):
@RunWith(PactRunner.class)
@Provider("test_provider" )
@PactBroker(host = "https://mybroker.aws.com/pacts/provider/spring-demo-service/consumer/express-demo-service/latest", port = "80")
@VerificationReports({"console", "markdown"})
public class TestPacts {
private static final Logger LOG = LoggerFactory.getLogger(TestPacts.class);
private static ConfigurableApplicationContext application;
@TestTarget
public final Target target = new HttpTarget(8080);
@BeforeClass
public static void startSpring(){
LOG.info("starting application");
application = SpringApplication.run(ProviderServiceApplication.class);
}
@State("default")
public void toDefaultState() {
LOG.info("Now service in default state");
}
@State("extra")
public void toExtraState() {
LOG.info("Now service in extra state");
}
@AfterClass
public static void kill(){
LOG.info("stop application");
application.stop();
}
}
Когда я запускаю, я получаю ошибку:
org.junit.runners.model.InitializationError
at au.com.dius.pact.provider.junit.PactRunner.initialize(PactRunner.kt:93)
at au.com.dius.pact.provider.junit.PactRunner.getChildren(PactRunner.kt:140)
at org.junit.runners.ParentRunner.getFilteredChildren(ParentRunner.java:426)
at org.junit.runners.ParentRunner.getDescription(ParentRunner.java:351)
at com.intellij.junit4.JUnit4IdeaTestRunner.getDescription(JUnit4IdeaTestRunner.java:78)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:50)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)