Запуск теста Spring Cloud Contract в проекте, отличном от Spring

Я создал заглушку 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.

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


person Ben Watson    schedule 27.04.2018    source источник


Ответы (2)


Просто используйте правило 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");
    }
person Marcin Grzejszczak    schedule 27.04.2018
comment
Не могли бы вы немного уточнить, пожалуйста? Я нашел cloud.spring.io/spring-cloud-contract/1.0 .x/, но вы должны создавать свои собственные заглушки в клиентском коде, а это не то, что я ищу здесь. - person Ben Watson; 27.04.2018
comment
cloud.spring.io/spring- cloud-static/Edgware.SR3/single/ и образцы и github.com/spring-cloud-samples/spring-cloud-contract-samples/ мы действительно тратим время на документацию но вы должны проверить последний выпуск поезда - person Marcin Grzejszczak; 27.04.2018
comment
Отлично спасибо. Документы очень хорошие, мне просто не повезло с Ctrl+F :) - person Ben Watson; 27.04.2018
comment
Я реализую его прямо сейчас и отмечу, когда он станет зеленым. - person Ben Watson; 27.04.2018
comment
github.com/spring-cloud-samples/spring-cloud-contract-samples/ по-прежнему требует аннотаций RunWith(SpringRunner) и SpringBootTest, поэтому я получаю исходную ошибку, если не внесу изменения, указанные в моем отвечать. Я что-то упускаю? - person Ben Watson; 27.04.2018
comment
Это не требует springboottest. Если у меня есть это в образце, то это неправильно. Вам также не нужен пружинный бегун. Вам просто нужен нормальный тест junit - person Marcin Grzejszczak; 28.04.2018
comment
Это работает, если все аннотации на уровне класса из github.com/spring-cloud-samples/spring-cloud-contract-samples/ удаляются. Я также не использую MockMvc. - person Ben Watson; 30.04.2018
comment
Большой! Думаю, мы можем пометить это как решенное. Я добавлю вопрос, чтобы удалить ненужные аннотации - person Marcin Grzejszczak; 30.04.2018
comment
Было бы здорово иметь рабочий пример в качестве ответа; на данный момент это всего лишь одна строка, которая, вероятно, слишком коротка, чтобы помочь другим людям в будущем. Я попытался добавить свой рабочий код в качестве редактирования, но он был отклонен. Если вы скопируете и вставите код документации, когда проблема будет решена, я приму этот ответ. - person Ben Watson; 30.04.2018
comment
Я отредактировал ответ. Я не могу изменить образцы, потому что они сочетают в себе правило JUnit для загрузки заглушек и использование mock mvc для тестирования контроллера. - person Marcin Grzejszczak; 30.04.2018

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

@SpringBootTest(classes = ContractTest.class)

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

configurations {
    all*.exclude module : 'spring-boot-starter-logging'
}
person Ben Watson    schedule 27.04.2018