以下是我使用JUnit Mockito的测试代码:
@Before
public void preSetup() throws Exception {
AuditTrail auditTrail = new AuditTrail();
auditTrail.setEventType(1);
auditTrail.setEventDetail("play");
auditTrail.setEventDate(new Date());
Mockito.doReturn(auditTrail).when(auditService).addAuditTrail(auditTrail);
}
@Test
public void testaddPlayAuditRecord() {
boolean value = auditService.addPlayAuditRecord();
assertEquals(true, value);
}
我的服务如下:
@Override
public boolean addPlayAuditRecord() {
return addAuditRecord(1,"play");
}
@Override
public boolean addDeleteAuditRecord() {
return addAuditRecord(2,"delete");
}
@Override
public boolean addSearchAuditRecord() {
return addAuditRecord(3,"search");
}
private boolean addAuditRecord(String eventType, String eventDetail) {
AuditTrail auditTrail = new AuditTrail();
auditTrail.setEventType(eventType);
auditTrail.setEventDetail(eventDetail);
auditTrail.setEventDate(new Date());
AuditTrail obj = auditService.addAuditTrail(auditTrail);
}
auditService.addAuditTrail(auditTrail)进行数据库调用,我要模拟该数据库调用并返回具有我选择的值的对象。
但是,此auditTrail对象是由依赖于调用它的方法的值构建的。它们取决于调用addAuditRecord方法的方法而有所不同。另外,我们使用new Date()获取当前的date对象。因此,我将在测试中使用的日期与在addAuditRecord中使用的日期会有所不同,因为该日期是当前日期。
因此,在我的测试文件中,如何模拟此addAuditTrail方法?可以在@Before方法中进行这种模拟吗?此处传递的auditTrail对象应与addAuditRecord方法中实际构造的对象匹配。
我该怎么做?
答案 0 :(得分:1)
您尝试过吗?
Mockito.doReturn(auditTrail).when(auditService)
.addAuditTrail(ArgumentMatchers.any(AuditTrail.class));
通过这种方式,每次传递AuditTrail
对象时,无论其内部值如何,都将运行此规则。
对于您的Mockito版本,只需使用:
Mockito.doReturn(auditTrail).when(auditService)
.addAuditTrail(Matchers.any(AuditTrail.class));