2013-03-20 84 views
3

現在單元測試我需要authenticate方法只是假裝它工作正常,在我的情況下什麼都不做,所以我可以測試方法本身是否做預期的工作(身份驗證測試其他地方根據單元測試的原則,但驗證需要調用該方法內)模擬對象的身份驗證在春季安全

這是我的TestNG的類,我需要做的模擬對象進行身份驗證:

package in.hexgen.api.facade; 

import javax.annotation.Resource; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.security.core.Authentication; 
import org.testng.annotations.Test; 

import com.hexgen.api.facade.security.HexGenPermissionEvaluator; 

public class HexGenPermissionEvaluatorTest { 
    private static final Logger logger = LoggerFactory.getLogger(HexGenPermissionEvaluatorTest.class); 

    Object name="akash"; 
    Object permission="CREATE_REQUISITION"; 
    Authentication authentication; 

    //@Resource(name = "permissionEval") 
    private HexGenPermissionEvaluator permissionEval; 

    @Test 
    public void hasPermission() { 
     //authentication.setAuthenticated(true); 

     logger.debug("HexGenPermissionEvaluator Generate - starting ..."); 
     permissionEval.hasPermission(authentication,name, permission); 
     logger.debug("HexGenPermissionEvaluator Generate - completed ..."); 
    } 

} 

如何做到這一點。

問候

回答

5

考慮到permissionEval對象調用authentication.isAuthenticatedFor(name,permission),使用的Mockito(https://code.google.com/p/mockito/):

import static org.mockito.Mockito.* 

... 

@Test 
public void test(){ 
    // Given 
    Authentication authentication = mock(Authentication.class); 
    when(authentication.isAuthenticatedFor(eq(name),eq(permission)).thenReturn(true); 

    // When 
    permissionEval.hasPermission(authentication,name, permission); 

    // Then 
    // Do you asserts/verify 
} 
0

您可以添加你上面的@Test方法@WithMockUser這樣

@Test 
@WithMockUser(username = "user1", password = "user1", authorities = { 
     "ROLE_ADMIN" }) 
public void testDeleteUser() throws Exception { 
    User currentUser = createUser(1L, new Role(1L, "admin")); 
    User userForDelete = createUser(2L, new Role(2L, "user")); 
    when(userDaoMock.findByLogin(currentUser.getLogin())) 
      .thenReturn(currentUser); 
    mockMvc.perform(get("/admin/delete/{id}", userForDelete.getId())) 
      .andExpect(status().is3xxRedirection()) 
      .andExpect(redirectedUrl("/admin")); 
} 
相關問題