【问题标题】:EasyMock deep stubsEasyMock 深存根
【发布时间】:2012-03-02 23:06:37
【问题描述】:

我必须使用 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();
   }
}

-谢谢

【问题讨论】:

    标签: mocking mockito easymock unitils


    【解决方案1】:

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

    【讨论】:

    • 感谢您的建议。我是否必须将被测类更改为Principal principal = context.getCallerPrincipal(); String caller=principal.getName();,然后在我的测试中模拟主体并将其注入被测类?
    • 我认为您不需要更改 SUT。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多