我正在尝试测试作为mvc控制器一部分的rest调用。 我的单元测试当前返回的是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();
}
}
}
我是否从我的perform()调用中丢失了导致404错误请求代码的内容?
答案 0 :(得分:1)
我使用像这样的控制器测试代码
@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 {}