3 回答

TA貢獻1783條經驗 獲得超4個贊
您需要在測試設置中使用像 Mokito 這樣的 Mocker。就像是:
public class YouTestClass {
@MockBean
DAO mockedDAO;
...
@Test
public void testUpdate() {
Mockito.when(mockedDAO.updateMember(Mockito.isA(RequestObject.class)).thenReturn(new ResponseObject());
RequestObject request = new RequestObject();
request.setEntityId(1234);
request.setLob('testLOB');
ResponseObject response = service.updateMember(request);
}
您需要將.thenReturn(new ResponseObject());ResponseObject 調整為您實際想要接收的測試。此外,您的 DAO 類似乎是一個靜態類,因此您可能需要閱讀如何盡可能地模擬它。否則你可能想讓它成為一個單身人士。

TA貢獻1789條經驗 獲得超8個贊
例如,如果您在服務層上進行測試,您可以這樣做。
@Mock
private DAO dao;
@Test
public void testUpdate() {
RequestObject request = new RequestObject();
request.setEntityId(1234);
request.setLob('testLOB');
ResponseObject result = //the response that you want
when(dao.updateMember(eq(request))).thenReturn(result);
ResponseObject response = service.updateMember(request);
// ASSERTIONS HERE
}

TA貢獻1803條經驗 獲得超6個贊
我所做的基本上是:當我通過服務調用調用 DAO 時,例如 '''when(AccountManagerImpl.saveAccount(testAccount)).thenReturn(mockedAccount)'''。挑戰在于當方法返回 void 時,即只是將一些數據轉儲到表中。這意味著您必須間接確認方法調用。在我的例子中,我使用“verify(mockedAccount, times(1)).saveAccount)”。這只能保證該方法至少被調用一次。當然還有更深的層次。如果您想確認數據已寫入實際表,那么您自然需要更強大的測試工具,即設置測試數據庫等。結果由例如 when(mockPreparedStmnt.execute()) 設置。thenReturn(Boolean.TRUE) 這當然會做出大量假設,這些假設可能會反過來咬你一口。您基本上是在說-讓我們假設數據已正確保存。但是,如果該假設本身就是 SUT 怎么辦?我只是在代碼審查期間提出它——這里是測試覆蓋率矩陣將為您節省許多夜晚的地方。
添加回答
舉報