Mocking String.valueof()



我正在测试我的弹簧控制器并尝试执行以下操作

控制器

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 不模拟静态方法?

相关内容

  • 没有找到相关文章

最新更新