2013-09-25 113 views
1

我測試我的春天控制器和嘗試做以下嘲諷將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 

我需要我的if塊爲true並執行。
有什麼辦法可以做到?

+0

你看過PowerMock嗎?請參閱https://code.google.com/p/powermock/wiki/MockStatic和https://code.google.com/p/powermock/wiki/MockFinal。 –

回答

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 

模擬物authentication.getAuthorities()方法或使用限制Powermock

這可能對link有所幫助。