需要跳过控制器中令牌 ID 登录的验证以进行单元测试
由于我正在测试控制器本身,因此不确定要使用什么 Mock 或 spy
public class TestController extends BaseController {
@Autowired
TestService service;
@RequestMapping(value = "/test")
public @ResponseBody TestResponse getAll(@RequestBody TestRequest request) {
validateToken(request);
TestResponse response = service.getall(request);
response.setTokenID(request.getTokenID());
return response;
}
}
public class BaseController {
protected void validateToken(IRequest request) {
TokenResponse tokenresponse = restTemplate.exchange(TokenServiceURL, HttpMethod.GET, null, TokenResponse .class, tokenId).getBody();
User user = new user()
user.setUserRole(tokenresponse.getUser()));
request.setUser(user);
}
}
public class TestControllerTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
@Autowired
private TestController testControlller;
@MockBean
private TestService testService;
BaseController baseControllerSpy = Mockito.spy(BaseController.class);
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
@Test
public void verifygetAll() throws Exception {
TestRequest request = new TestRequest();
TestResponse response = new Response();
**Mockito.doNothing().when(baseControllerSpy).validateTokenID(request);**
when(testService.get(request)).thenReturn(response);
mockMvc.perform(MockMvcRequestBuilders.post("/test")
.contentType(MediaType.APPLICATION_JSON)
.content(requestString)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
}
}
作为间谍的基本控制器似乎不起作用,有没有其他方法可以解决这个问题。请帮忙