Весной тестирование контроллеров с классом аутентификации - PullRequest
1 голос
/ 10 октября 2019

в моих методах контроллера я использую класс аутентификации для входа в данные пользователя.

Это выглядит так:

@GetMapping("/somepath")
    public ResponseEntity<SomeType> someMethod(Authentication user){
        ...
    }

и я не знаю, как это проверить. Я пробовал аннотацию @WithMockUser, .with (user (...)), и она не работает. Кто-нибудь знает, как это сделать правильно?

1 Ответ

1 голос
/ 10 октября 2019

В идеале, если вы следовали хорошей практике кодирования, вы никогда не закончите тем, что будете писать контрольные примеры для контроллера или юриста по данным. В идеале тестовые случаи используются для проверки некоторой бизнес-логики, включенной в код, и по ссылке мы должны записать весь бизнес в сервисы.

На контроллере нужно выполнять гораздо меньше работы, например, при проверке запроса.

В любом случае приведенный ниже фрагмент кода может помочь вам протестировать методы контроллера.

   MockMvc mvc;
   @Autowired
   WebApplicationContext webApplicationContext;

   protected void setUp() {
      mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
   }
   protected String mapToJson(Object obj) throws JsonProcessingException {
      ObjectMapper objectMapper = new ObjectMapper();
      return objectMapper.writeValueAsString(obj);
   }
   protected <T> T mapFromJson(String json, Class<T> clazz)
      throws JsonParseException, JsonMappingException, IOException {

      ObjectMapper objectMapper = new ObjectMapper();
      return objectMapper.readValue(json, clazz);
   }


@Test
public void someMethodTest() throws Exception {
   String uri = "/somepath";
   Authentication authentication = new Authentication ();

   String inputJson = super.mapToJson(authentication);
   MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.put(uri)
      .contentType(MediaType.APPLICATION_JSON_VALUE).content(inputJson)).andReturn();

   int status = mvcResult.getResponse().getStatus();
   assertEquals(200, status);
   String content = mvcResult.getResponse().getContentAsString();
   // Assert whatever you want 
   assertEquals();
}
...