Mock Spring Controller для модульного тестирования - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь проверить вызов покоя, который является частью контроллера MVC.Мой модульный тест в настоящее время возвращает код ошибки 404 вместо кода состояния 200, который будет определять, что запрос был успешно отправлен.

Вот подпись моего метода, который я пытаюсь проверить:

@PreAuthorize("hasRole('ROLE_SSL_USER')")
@PostMapping(value = "/employee", consumes = MediaType.ALL_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public ResponseEntity<Object> postEmployee(HttpEntity<String> httpEntity, @RequestHeader("DB-Client-Id") String clientId,
        @RequestHeader("X-Forwarded-Client-Dn") String dn) throws IOException, ValidationException {}

Вот мой класс модульных тестов:

public class ControllerTest {

  @InjectMocks
  private Controller aController;

  private MockMvc mockMvc;

  @Before
  public void setup() {
    MockitoAnnotations.initMocks(this);
    this.mockMvc = MockMvcBuilders.standaloneSetup(aController).build();
  }

  @Test
  public void PostEmpTest() {

    try {
        this.mockMvc.perform(post("/employee")
                    .contentType(MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  }
}

Я что-то упустил из своего вызова execute (), что привело к неверному коду 404 запроса?

1 Ответ

1 голос
/ 30 апреля 2019

Я использую для тестов контроллера код, подобный этому

@RunWith(SpringRunner.class)
@WebMvcTest(Controller.class)
@AutoConfigureWebClient
public class ControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void entityTypes() throws Exception {
        String json = "...";
        mockMvc.perform(
                post("URL")
                        .contentType(APPLICATION_JSON_UTF8)
                        .content(json))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(content().contentType(APPLICATION_JSON_UTF8))
        ;
    }
}

Попробуйте - надеюсь, это поможет.

PS: также я не уверен, но похожевам нужно добавить @RequestBody в объявление вашего контроллера:

public ResponseEntity<Object> postEmployee(
    @RequestBody HttpEntity<String> httpEntity, 
    @RequestHeader("DB-Client-Id") String clientId,
    @RequestHeader("X-Forwarded-Client-Dn") String dn) throws IOException, ValidationException {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...