目前,我正在为我的个人项目编写单元测试。不幸的是,我遇到了一个特定的逻辑,我不知道如何测试。
我有一个create方法,它将DTOMap到实体,并使用存储库保存它。
public AruCall create(AruCallDtoRequest dtoRequest) {
log.info("creating aru call with dto: {}", dtoRequest);
AruCall aruCall = AruCall.builder()
.aruRequestsId(dtoRequest.getAruRequestsId())
.customerMsisdn(dtoRequest.getCustomerMsisdn())
.callParam(dtoRequest.getCallParam())
.dopFlag(dtoRequest.getDopFlag())
.waitCalls(dtoRequest.getWaitCalls())
.build();
log.info("built aru call with dto: {}", dtoRequest);
return aruCallsRepository.save(aruCall);
}
在测试中,我试图验证repository.save()方法调用,但不幸的是,测试返回了“Argument(s)are different!”异常。下面是我的TestClass:
@ExtendWith(MockitoExtension.class)
class AruCallServiceImplTest {
@InjectMocks
private AruCallsServiceImpl aruCallsService;
@Mock
private AruCallsRepository aruCallsRepository;
@Test
@DisplayName("Test for creating and saving new AruCall")
public void test_createdObjectsFieldsAreEqualToDtoFields() {
aruCallsService.create(AruCallDtoRequest.builder()
.customerMsisdn("test")
.callParam("test")
.aruRequestsId(1L)
.dopFlag(1)
.waitCalls(0)
.build());
verify(aruCallsRepository).save(AruCall.builder()
.aruRequestsId(1L)
.customerMsisdn("test")
.callParam("test")
.dopFlag(1)
.waitCalls(0)
.build());
}
}
有任何建议如何修复或优化此测试吗?
1条答案
按热度按时间ctrmrzij1#
它不起作用,因为验证时的
AruCall
对象与服务内创建的对象不是同一个对象。要验证对象是否包含正确的值,u应该使用参数捕获器: