【问题标题】:Running Spring Cloud Contract test in non-Spring project在非 Spring 项目中运行 Spring Cloud Contract 测试
【发布时间】:2018-10-08 08:53:59
【问题描述】:

我在 Spring Boot 项目 (spring-server) 中创建了 Spring Cloud Contract 存根。想要调用此存根的客户端不是 Spring 项目,也不能是 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 项目。

这里有什么解决方法?

【问题讨论】:

    标签: java spring spring-boot spring-cloud-contract


    【解决方案1】:

    只需使用 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");
        }
    

    【讨论】:

    【解决方案2】:

    我修改了@SpringBootTest这一行:

    @SpringBootTest(classes = ContractTest.class)
    

    然后得到了一些我通过finding this answer 解决并添加到build.gradle 的 Logback 错误:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 2019-09-28
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      相关资源
      最近更新 更多