模拟String.valueof()

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执行.
有什么办法可以做到吗?

xyz*_*xyz 5

因为
1. String课程是最终的,你不能用Mockito模拟最后的课程.
2. String.valueOf是一个静态方法,你不能用Mockito模拟静态方法

来自Mockito FAQ

Mockito有什么限制

Needs java 1.5+
Cannot mock final classes    // String is Final
Cannot mock static methods... // String.valueOf is static
Run Code Online (Sandbox Code Playgroud)

无论是模拟authentication.getAuthorities()方法还是使用Powermock.

链接可能有所帮助.