Выполнение теста Spring Cloud Contract в не Spring проекте - PullRequest
0 голосов
/ 27 апреля 2018

Я создал заглушку Spring Cloud Contract в проекте Spring Boot (spring-server). Клиент, который хочет вызвать эту заглушку, не является проектом Spring и не может быть им. Если я запускаю следующее в клиенте:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureStubRunner(ids = {"uk.co.hadoopathome:spring-server:+:stubs:8093"},
        stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class ContractTest {
    @Test
    public void testContractEndpoint() {
        try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
            HttpGet httpGet = new HttpGet("http://localhost:8093/ac01");
            CloseableHttpResponse response = httpclient.execute(httpGet);
            String entity = EntityUtils.toString(response.getEntity());
            assertEquals("ac01returned", entity);
            response.close();
        } catch (IOException ignored) {
        }
    }
}

тогда я получаю ошибку

java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

Очевидно, у меня нет @SpringBootConfiguration, так как это не проект Spring Boot.

Какой обходной путь здесь?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Просто используйте правило Junit, и вам не придется настраивать контекст

public class JUnitTest {

    @Rule public StubRunnerRule rule = new StubRunnerRule()
            .downloadStub("com.example","beer-api-producer")
            .withPort(6543)
            .workOffline(true);

    @Test
    public void should_work() {
        String response = new RestTemplate().getForObject("http://localhost:6543/status", String.class);

        BDDAssertions.then(response).isEqualTo("ok");
    }
0 голосов
/ 27 апреля 2018

Я изменил строку @SpringBootTest:

@SpringBootTest(classes = ContractTest.class)

, а затем получил некоторые ошибки Logback, которые я решил , найдя этот ответ и добавив к build.gradle:

configurations {
    all*.exclude module : 'spring-boot-starter-logging'
}
...