Весенний тест неверной конфигурации - PullRequest
0 голосов
/ 29 мая 2018

У меня есть простой REST-контроллер, который я пытаюсь протестировать, тест выглядит так:

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class ModelControllerTests {
    private MediaType contentType = MediaType.APPLICATION_JSON_UTF8;
    private HttpMessageConverter jacksonConverter;
    private MockMvc mockMvc;

    @Mock
    private ModelService service;

    @InjectMocks
    private ModelController controller;

    @Autowired
    private WebApplicationContext context;

    @Autowired
    void setConverters(HttpMessageConverter<?>[] converters) {
        jacksonConverter = Arrays.stream(converters)
                .filter(hmc -> hmc instanceof MappingJackson2HttpMessageConverter)
                .findAny()
                .orElse(null);

        assertNotNull(jacksonConverter);
    }

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mockMvc = standaloneSetup(controller)
                .build();
    }

    @Test
    public void postModel_returnsModel() throws Exception {
        when(service.doSomething(any())).thenReturn(new Model("cde", null));

        mockMvc.perform(post("/model")
                .content(json(new Model("abc", null)))
                .contentType(contentType))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(content().json("{\"notEmpty\":\"abc\"}", true));
    }

    private String json(Object o) throws IOException {
        var responseMessage = new MockHttpOutputMessage();
        jacksonConverter.write(o, MediaType.APPLICATION_JSON_UTF8, responseMessage);
        return responseMessage.getBodyAsString();
    }
}

Теперь у меня проблема с зависимостями и конфигурацией, у меня есть следующеестрока в моем application.properties: spring.jackson.default-property-inclusion=non_null, которая отлично работает при использовании обычного mockMvc (webAppContextSetup), однако я хотел смоделировать ModelService (который автоматически подключается в ModelController.

При использовании standaloneSetup для создания экземпляра MockMvc, похоже, нет конфигурации, возвращаются поля, для которых задано значение null, и, кроме того, кажется, что ModelService, аннотированный @Mock, не совпадает с тем, что указан в ModelController, поэтому, когда postModel_returnsModel, он использует неправильныйсервис.

Как я могу решить эту проблему?

...