繁体   English   中英

在非Spring项目中运行Spring Cloud Contract测试

[英]Running Spring Cloud Contract test in non-Spring project

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

这里有什么解决方法?

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

我修改了@SpringBootTest行:

@SpringBootTest(classes = ContractTest.class)

然后通过找到此答案并添加到build.gradle解决了一些Logback错误:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM