Spring Boot集成测试在彼此运行后失败

时间:2017-06-12 18:21:18

标签: java spring-boot integration-testing spring-boot-test

我有一个Spring Boot集成测试和一个Spring Boot Web集成测试。单独运行时,两个测试都会通过但是,当作为套件的一部分运行时,第二次执行的测试总是失败。每个测试都启动(并拆除)我的应用程序,然后是我的h2数据库。我已经尝试过交换测试的顺序,而后者的测试总是失败。

我可以做些什么来确保这些测试是独立的/不会相互影响?

注意:我正在对两个测试使用类注释@RunWith(SpringRunner.class)@SpringBootTest,并且Web集成测试将参数webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT传递给后一个注释

整合测试:

@Test
public void testFindAll() {
    List<Object> objects = objectRepository.findAll();
    assertThat(objects.size(), is(greaterThanOrEqualTo(0)));
}

网络集成测试:

@Test
public void testListAll() throws IOException {
    TestRestTemplate testRestTemplate = new TestRestTemplate();
    ResponseEntity<String> responseEntity = testRestTemplate.getForEntity("url/api/v1/objects", String.class);

    assertThat(responseEntity.getStatusCode(), equalTo(OK));

    ObjectMapper objectMapper = new ObjectMapper();
    JsonNode responseJson = objectMapper.readTree(responseEntity.getBody());

    assertThat(responseJson.isMissingNode(), is(false));
    assertThat(responseJson.toString(), equalTo("[]"));
}

1 个答案:

答案 0 :(得分:1)

我有一个类似的问题,尽管我的测试涉及对嵌入式H2 DB的更改。我通过用@DirtiesContext注释我的类来解决了这个问题。在测试之后,Spring将重新加载ApplicationContext。