2

EasyMock または UnitilsMock を使用して、次のセキュリティ ステップをモックする必要があります。これを達成する方法を提案してください。

String id = context.getCallerPrincipal().getName();

このステップはセキュリティに関連しています。したがって、プリンシパル オブジェクトを作成して 2 層のモックを作成することはできません。私は、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();
   }
}

-ありがとう

4

1 に答える 1

1

をモックできる場合はPrincipal、スタブcontext.getCallerPrincipal()してこのモックを返し、次にスタブmockedPrincipal.getName()して必要なものを返すことができます。

于 2012-03-03T05:38:25.717 に答える