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 怎么办?我只是在代码审查期间提出它——这里是测试覆盖率矩阵将为您节省许多夜晚的地方。
添加回答
举报