模拟Spring Security中的身份验证对象

Jav*_*ons 3 java testng spring mocking spring-security

现在对于单元测试我需要验证方法才能假装它正常工作,在我的情况下什么都不做,所以我可以测试方法本身是否做了预期的工作(根据单元测试原则在其他地方测试身份验证,但验证需要在那个方法里面调用)

这是我的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 ...");
  }

}
Run Code Online (Sandbox Code Playgroud)

这该怎么做.

最好的祝福

rco*_*len 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
}
Run Code Online (Sandbox Code Playgroud)