Mocking EasyMock深桩

Mocking EasyMock深桩,mocking,mockito,easymock,unitils,Mocking,Mockito,Easymock,Unitils,我必须使用EasyMock或UnitilsMock模拟以下安全步骤。你能提出一个实现这一目标的方法吗 String id = context.getCallerPrincipal().getName(); 此步骤与安全性相关。因此,我将无法创建Principle对象并进行两层模拟。我知道mockito很容易处理这样的事情 @Mock(answer = Answers.RETURNS_DEEP_STUBS) SessionContext mockContext; 但是,我需要一个使用EasyM

我必须使用EasyMock或UnitilsMock模拟以下安全步骤。你能提出一个实现这一目标的方法吗

String id = context.getCallerPrincipal().getName();
此步骤与安全性相关。因此,我将无法创建Principle对象并进行两层模拟。我知道mockito很容易处理这样的事情

@Mock(answer = Answers.RETURNS_DEEP_STUBS)
SessionContext mockContext;
但是,我需要一个使用EasyMock或Unitils Mock的类似解决方案。下面给出了我希望进行单元测试的完整代码

@Override
@PermitAll
public List<Employee> findAll() {
   boolean isAdmin = context.isCallerInRole(Roles.ADMIN);
   if (isAdmin) {
      return super.findAll();
   } else {
      String id = context.getCallerPrincipal().getName();
      Query query = getEntityManager().createNamedQuery("findEmployeeById");
      query.setParameter("employeeId", id);
      return query.getResultList();
   }
}
@覆盖
@佩尔米塔尔
公共列表findAll(){
布尔值isAdmin=context.isCallerInRole(Roles.ADMIN);
如果(isAdmin){
返回super.findAll();
}否则{
字符串id=context.getCallerPrincipal().getName();
Query Query=getEntityManager().createNamedQuery(“findEmployeeById”);
query.setParameter(“employeeId”,id);
返回query.getResultList();
}
}

-谢谢

如果你可以模拟
主体
,那么你可以存根
context.getCallerPrincipal()
来返回这个模拟,然后存根
mockedPrincipal.getName()
来返回你需要的任何东西。

谢谢你的建议。我是否必须将测试中的类更改为
Principal=context.getCallerPrincipal();String caller=principal.getName()然后在我的测试中模拟原理并将其注入到被测试的类中?我认为您不需要更改SUT。