gpt4 book ai didi

java - JUnit 如何使用参数对象的不同值进行模拟?

转载 作者:行者123 更新时间:2023-11-30 05:59:10 25 4
gpt4 key购买 nike

以下是我使用 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() 来获取当前日期对象。因此,我在测试中使用的日期将与我在 addAuditRecord 中使用的日期不同,因为该日期是当前日期。

那么在我的测试文件中,如何模拟这个 addAuditTrail 方法?这样的模拟可以在@Before方法中完成吗?这里传递的auditTrail对象应该与addAuditRecord方法中实际构造的对象匹配。

我该怎么做?

最佳答案

你试过这个吗?

Mockito.doReturn(auditTrail).when(auditService)
.addAuditTrail(ArgumentMatchers.any(AuditTrail.class));

通过这种方式,您每次传递 AuditTrail 对象时都会运行此规则,无论其内部值如何。

对于您的 Mockito 版本,只需使用:

Mockito.doReturn(auditTrail).when(auditService)
.addAuditTrail(Matchers.any(AuditTrail.class));

关于java - JUnit 如何使用参数对象的不同值进行模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52553085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com