qiG*_*uar 1 java mocking mockito
我正在测试我的弹簧控制器并尝试执行以下操作
调节器
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
String role = String.valueOf(authentication.getAuthorities());
if(role.contains("user")) {
...
}
Run Code Online (Sandbox Code Playgroud)
测试
@Test
public void testLoginUser() throws Exception {
User user = new User();
user.setLogin("user");
user.setRoleid(1L);
SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user,user));
when(String.valueOf(Collection.class)).thenReturn("user");
Run Code Online (Sandbox Code Playgroud)
但我明白了
org.mockito.exceptions.misusing.MissingMethodInvocationException
Run Code Online (Sandbox Code Playgroud)
我需要我的if块才能true执行.
有什么办法可以做到吗?
因为
1. String课程是最终的,你不能用Mockito模拟最后的课程.
2. String.valueOf是一个静态方法,你不能用Mockito模拟静态方法
Mockito有什么限制
Run Code Online (Sandbox Code Playgroud)Needs java 1.5+ Cannot mock final classes // String is Final Cannot mock static methods... // String.valueOf is static
无论是模拟authentication.getAuthorities()方法还是使用Powermock.
此链接可能有所帮助.