现在对于单元测试我需要authenticate方法来假装它正常工作,在我的情况下什么也不做,所以我可以测试方法本身是否做了预期的工作(根据单元测试原则在其他地方测试身份验证,但是需要在该方法中调用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 ...");
}
}
如何做到这一点。
最好的问候
答案 0 :(得分:5)
考虑到permissionEval
对象使用Mockito(https://code.google.com/p/mockito/)调用authentication.isAuthenticatedFor(name,permission)
:
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
}
答案 1 :(得分:1)
您可以在@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"));
}