1.实际业务:
controller层
@GetMapping(value = "/abc/{username}/acc", produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String,Set<String>> findUserAccess(@PathVariable(name = "username") String username) throws IAMException {
InfoLogUtil.debug("findUserAccess start :{}",LOGGER);
//check Permission,session校验
userService.checkUserPermission();
if (StringUtils.isEmpty(username)) {
throw new IAMException(Error.MISSING_MANDATORY_FIELD.getErrorCode(), Error.MISSING_MANDATORY_FIELD.getErrorMessage());
}
return accessService.findUserAccess(username);
}
service层代码省略....
2.单元测试:
public class AccessControllerTest extends BaseTest {
@SpyBean
private AccessService accessService;
@SpyBean
private CommonUtilsComponent commonUtilsComponent;
@Autowired
private WebApplicationContext wac;
private MockMvc mvc;
private MockHttpSession session;
@Before
public void setUp() throws IAMException {
mvc = MockMvcBuilders.webAppContextSetup(wac).build();
session = new MockHttpSession();
session.setAttribute("username","admin");//假设已经有登录的session
doReturn(new HashMap<String, Set<String>>()).when(accessService)
.findUserAccess(anyString());
}
@Test
public void findUserAccess_success() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/abc/admin/acc")
.contentType(MediaType.APPLICATION_JSON)
.content(findUserAccessRequest_success())
.session(session))
.andExpect(MockMvcResultMatchers.status().isOk());
}
private String findUserAccessRequest_success() {
return "{\n" +
" \"access_codes: [\" "+
" \"access_code\": \"code1\"," +
" \"access_code\": \"code2\"]\n"+
"}\t";
}
}
(时间紧迫,粗略写了一些)