2012-03-02 35 views
2

我必須使用EasyMock或UnitilsMock來模擬以下安全步驟。你能否建議一種方法來實現這一目標?EasyMock深存根

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

此步驟與安全性有關。所以我將無法創建一個Principle對象並進行兩層模擬。我知道,很容易的Mockito處理此類東西如下,

@Mock(answer = Answers.RETURNS_DEEP_STUBS) 
SessionContext mockContext; 

但是,我需要使用EasyMock的或Unitils模擬類似的解決方案。完整的代碼,我想單元測試在下面給出,

@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(); 
    } 
} 

-Thanks

回答

1

如果你可以嘲笑Principal,那麼你可以存根context.getCallerPrincipal()回到這個模擬,然後存根mockedPrincipal.getName()返回不管你需要它。

+0

感謝您的建議。我應該不得不將測試中的類更改爲Principal Principal = context.getCallerPrincipal(); String caller = principal.getName();'然後在我的測試中模擬Pricipal並將其注入到被測試的類中? – Bala 2012-03-03 10:59:30

+0

我不認爲你需要改變SUT。 – 2012-03-04 07:23:59