java - 在 Spring 中使用 Authentication 类测试控制器
问题描述
在我的控制器方法中,我使用身份验证类来获取登录的用户数据。
它看起来像这样:
@GetMapping("/somepath")
public ResponseEntity<SomeType> someMethod(Authentication user){
...
}
我不知道如何测试它。我尝试了@WithMockUser 注释,.with(user(...)),但它不起作用。有谁知道如何正确地做到这一点?
解决方案
理想情况下,如果您遵循良好的编码实践,您将永远不会最终为控制器或数据律师编写测试用例。理想情况下,测试用例用于测试代码中涉及的一些业务逻辑,通过引用我们应该将所有业务写入服务。
在控制器上应该做的工作非常少,比如请求验证。
无论如何,下面的代码可能会帮助您测试控制器方法。
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();
}
推荐阅读
- angular - 无法通过 Angular 中的 ngOnInit 通过 Observable 从 http.get 获取数据
- powershell - Powershell:以单独的行输出
- excel - VBA 错误:工作表类的激活方法失败
- flutter - Flutter in_app_purchase 插件中如何使用和查询已购买的非消耗品
- intellij-idea - 如何在 intellij IDE 中设置 kafka 连接
- javascript - antd表格行选择中全选复选框的自定义样式
- r - 运行混合模型时出错 - “名称”属性 [3] 必须与向量 [1] 的长度相同
- angular - 对象更新未反映在 HTML 角度上
- powershell - 使用 powershell 更新 Teamcity 参数
- python - 列表到字符串之间有一个空格?