【发布时间】:2021-03-14 19:24:02
【问题描述】:
我有一个具有以下结构的控制器:
@RequestMapping(value="/validate", method=RequestMethod.POST)
public ResponseEntity<Jwt> IsValid(@RequestBody UserRequest userRequest, @RequestHeader Map<String, String> header) throws Exception {
if(header.contains("key") && header.contains("secret") {
process(header.get("key"), header.get("secret"));
...
...
}
}
我正在使用 MockMvc 为这个控制器编写一个单元测试:
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
@SpringBootTest
public class AuthenticatorServiceTest {
@Autowired
private MockMvc mockMvc;
@Test
public void CorrectKeyValidation throws Exception {
String key = "correct-key";
String secret = "correct-secret";
Map<String, String> map = new HashMap<>();
map.put("key", key);
map.put("secret", secret);
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/validate")
.header() // <- doesn't accept Map here.
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andReturn();
...
...
}
}
由于MockMvcRequestBuilders 的header 方法只接受字符串,我不确定如何使用MockMvc 来测试我的控制器,其中Map<String, String> 作为@RequestHeader。任何帮助将不胜感激!
【问题讨论】:
-
@RequestHeader Map<String, String> header表示它将注入该映射中的所有标题。 -
感谢您的回复。你能详细说明一下吗?我尝试使用 mockMvc.perform(MockMvcRequestBuilders.post("/validate") .header("key", key) .header("secret", secret) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status() 发送。 isOk()).andReturn();但无法真正让它工作,因为它正在抛出
org.springframework.http.converter.HttpMessageNotReadableException。也许我在这里遗漏了一些东西.. -
顺便说一句:不要那样做。使用
@RequestHeader("key")。
标签: java spring-boot junit mockmvc