Как написать тест к REST?

253
21 марта 2017, 11:37
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
@WebAppConfiguration
public class ConfigurationControllerTest {
    @Autowired
    WebApplicationContext wac;
    private MockMvc mockMvc;
    @Before
    public void setup(){
        MockitoAnnotations.initMocks(this);
        this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }
    @Test
    public void testShouldReturnConfig() throws Exception {
        mockMvc.perform(get("/api/v1/config/get", "vasya"))
                .andExpect(status().isOk());
    }
}

//

@RestController
@RequestMapping(value = BasePath.V1)
public class ConfigurationController {
    @Autowired
    private ConfigurationService configurationService;
    @RequestMapping(value = "/config/set", method = RequestMethod.POST)
    public void setConfiguration(@RequestBody @NotNull ConfigurationDto dto) {
        this.configurationService.setConfig(dto);
    }
    @RequestMapping(value = "/config/get", method = RequestMethod.GET)
    public ConfigurationDto getConfiguration(@RequestParam(name = "name") String name){
        ConfigurationDto dto = new ConfigurationDto();
        Configuration config = this.configurationService.getConfig(name);
        HttpNotFoundException.ifNull(config);
        dto.name = config.getName();
        dto.server.port = config.getServerPort();
        dto.hh.login = config.getAgentLogin();
        dto.hh.password = config.getAgentPassword();
        dto.hh.url = config.getAgentUrl();
        dto.hh.clientId = config.getAgentClientId();
        dto.hh.clientSecret = config.getAgentClientSecret();
        dto.hh.accessToken = config.getAgentAccessToken();
        dto.hh.refreshToken = config.getAgentRefreshToken();
        return dto;
    }

//

java.lang.AssertionError: Status 
Expected :200
Actual   :400

Через swagger все работает отлично, выдает 200

Answer 1

Для начала:

Тест Json подразумевает получение контента и сравнение его с ожидаемым результатом https://spring.io/guides/tutorials/bookmarks/ https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html

Конкретней - нужно будет добавить строки по типу

 .accept(MediaType.TEXT_PLAIN))
 .andExpect(content().string(/** Здесь ваш JSON  **/))

В вашем случае:

400 ststus bad request то есть ваш запрос не правильно сформирован, скорее всего дело в параметре "vasya", не углубляясь в работу MockHTtpServletBuilder и т.д. предлагаю альтернативный вариант: так как это get-запрос вы могли б просто добавить параметры в url

/api/v1/config/get?name=vasya

Если же захотите отправлять именно объект - то вам понадобиться чтобы это был полноценный класс с полем name и значением "vasya"

READ ALSO
Что значит: Inference variable T has incompatible bounds

Что значит: Inference variable T has incompatible bounds

Прошу прощения, если вопрос покажется глупым, но почему не компилируется этот код:

361
При подключении к AWS нужно ставить java?

При подключении к AWS нужно ставить java?

Всем привет тут читаю о подключении к AWS http://docsaws

290
Как сделать невидимый цвет у seekbar?

Как сделать невидимый цвет у seekbar?

Как сделать transparent у seekBargetProgressDrawable()? Делая seekBar

338
Как создать пиксель закрашенный цветом?

Как создать пиксель закрашенный цветом?

Как создать пиксель закрашенный цветом? Необходимо на activity создать пиксель, закрашенный цветомСамым простым способом

283