我正在测试我的弹簧控制器并尝试执行以下操作
控制器
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
我需要if
块true
并执行。
有什么办法可以做到吗?
答案 0 :(得分:5)
由于
1. String
课程是最终的,你不能用Mockito模拟最后的课程
2. String.valueOf
是一个静态方法,你不能用Mockito模拟静态方法
Mockito有什么限制
Needs java 1.5+ Cannot mock final classes // String is Final Cannot mock static methods... // String.valueOf is static
模拟authentication.getAuthorities()
方法或使用Powermock。
这link可能会有所帮助。
答案 1 :(得分:1)
String.valueOf
是一种静态方法,不会被Mockito嘲笑。您的表达式将简单地解析为值为"class java.util.Collection"
的String实例。