我正在测试我的弹簧控制器并尝试执行以下操作
控制器
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
String role = String.valueOf(authentication.getAuthorities());
if(role.contains("user")) {
...
}
测试
@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");
但我得到
org.mockito.exceptions.misusing.MissingMethodInvocationException
我需要true
并执行我的if
块。
有什么办法可以做到吗?
因为
1.String
课是期末课,你不能用Mockito模拟期末课。
2. String.valueOf
是静态的,你不能用Mockito模拟静态方法
来自 莫基托常见问题
莫米托的局限性是什么
Needs java 1.5+ Cannot mock final classes // String is Final Cannot mock static methods... // String.valueOf is static
模拟authentication.getAuthorities()
方法或使用Powermock。
此链接可能会有所帮助。
String.valueOf
是一个静态方法,不会被Mockito嘲笑。表达式将简单地解析为值为 "class java.util.Collection"
的字符串实例。
为什么 Mockito 不模拟静态方法?