![](/img/trans.png)
[英]Mocking Local Scope Objects using Powermock and mockito within a static method
[英]Mockito mocking objects from inside local method
在我的課程中,依賴項是由Spring注入的。 在測試期間,我正在使用模擬。 在以下代碼中調用sys.getId("abc12345")
時,出現空指針異常。 我想知道如何編寫獲得100%覆蓋率的單元測試。
被測課程 :
public class SystemUT implements SUTIface{
@Inject
private AccountLookupDAO dao;
@Inject
private OrchService service;
public Response perform(Request req){
String sellerId = getId(request.getSeller().getNum());
String buyerId = null;
if(req.getBuyerId){
buyerId = getId(request.getBuyer().getNum())
}
service.execute(Request,sellerId,buyerId)
}
String getId(String num){
PrefAcct prefAcctObj = dao.lookupPrefId(num,Consants.StrArr);
PrefSysOfRecObj sorObj= prefAcctObj.getSysOfRecord();
return sorObj.getId();
}
}
單元測試 :
public Class SystemUTTest{
@Mock
SystemUT sys;
@Mock
AccountLookupDAO daoMock;
@Mock
OrchService serviceMock;
@Mock
PrefAcct prefAcctObj;
@Mock
PrefSysOfRecObj sorObj;
@Before
public void setup(){
Whitebox.setInternalState(sys, daoMock, serviceMock);
}
@Test
public test getId(){
when(dao.lookupPrefId(any(String.class), any(String[].class))).thenReturn(prefAcctObj);
when(prefAcctObj.getSysOfRecord()).thenReturn(sorObj);
when(sorObj.getId()).thenReturn("185");
assertEquals("185",sys.getId("abc12345"));
}
}
您的問題是您的SystemUT
類沒有注入其依賴項。 您可以讓Spring使用其JUnitRunner來執行此操作,但這實際上並不是單元測試,因為您將讓Spring決定注入哪些依賴項。 確實,您想要控制它們,並且做到這一點的一種方法是將類轉換為通過構造函數公開其依賴項:
public class SystemUT implements SUTIface{
private final AccountLookupDAO dao;
private final OrchService service;
@Inject
public SystemUT(AccountLookupDAO dao, OrchService service) {
this.dao = dao;
this.service = service;
}
}
由於Spring能夠使用@Inject
注釋的構造函數來注入依賴項,因此其功能與您當前的方法相同。 現在,當實例化SystemUT
類進行測試時,傳遞SystemUT
對象的依賴關系:
@Mock
AccountLookupDAO daoMock;
@Mock
OrchService serviceMock;
private SystemUT sys;
@Before
public void setup(){
sys = new SystemUT(daoMock, serviceMock);
Whitebox.setInternalState(sys, daoMock, serviceMock);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.