Testes de integração do Spring Boot: @AutoConfigureMockMvc e cache de contexto

11

Estou criando um aplicativo da Web muito básico usando o Spring Boot 1.5.1 e queria criar testes de integração para verificar os pontos de extremidade do REST. Como recomendado pela documentação, o MockMvc pode ser usado para isso.

Aqui está uma classe de teste muito simples:

package foo.bar.first;

import ...

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTest1 {

    @Autowired
    private WebApplicationContext context;

    @Autowired
    private MockMvc mvc;

    @Test
    public void shouldStartWebApplicationContext() {
        assertThat(context).isNotNull();
    }

    @Test
    public void shouldReplyToPing() throws Exception {
        mvc.perform(get("/ping"))
                .andExpect(status().isOk());
    }
}

Como esperado, inicia o contexto de aplicativo completo e executa testes.

Mais tarde, criei outras classes de teste semelhantes e observei que o novo novo contexto de aplicativo foi iniciado para cada classe de teste . As experiências mostram que o contexto é compartilhado apenas entre as classes de teste do mesmo pacote.

Por exemplo, se a mesma classe de teste for copiada várias vezes, os contextos serão os seguintes:

foo.bar
  first
    ApplicationTest1 (shared context)
    ApplicationTest2 (shared context)
  second
    ApplicationTest3 (brand new context)

Outras investigações também mostraram que ele está relacionado à anotação @AutoConfigureMockMvc . Se a anotação e os casos de teste relacionados ao MockMvc forem removidos, todas as três classes com êxito compartilharão o mesmo contexto .

Então, a questão é como obter contexto compartilhado para todos os testes com MockMvc ?

Nota: outros recursos sugerem usar MockMvcBuilders.webAppContextSetup(context).build() para obter a instância MockMvc, mas não funciona para mim (não envolve filtros ao processar solicitações da web).

    
por Vitaljok 09.03.2017 в 12:09
fonte

1 resposta

2

Parece ser um Bug introduzido com o Spring Boot 1.5: link

Você pode tentar um downgrade para o Spring Boot 1.4.x ou esperar pela versão corrigida (planejada para a próxima versão 1.5.5).

Atualização: Em vez de "@AutoConfigureMockMvc" você também pode configurar manualmente o seu MockMVC: link

Configuração manual do MockMVC funcionou bem no meu projeto.
O que você quer dizer com "não envolve filtros ao processar solicitações da Web"?

    
por brabenetz 09.06.2017 / 21:14
fonte