【发布时间】:2021-11-10 13:14:34
【问题描述】:
我正在为我的 ServiceImpl 方法创建单元测试,并尝试为 update 方法创建单元测试。但是,我不确定我应该如何测试这种方法。它返回相应实体的DTO,但我真的不知道应该使用@Spy 还是@Captor。如果我设置了一个模拟变量,然后尝试检索它并更新它的值,我将需要检索相同的记录来检查它的更新值。
我是测试新手,我还没有找到合适的更新方法示例。任何帮助将不胜感激。
public CompanyDTO update(CompanyRequest companyRequest, UUID uuid) {
final Company company = companyRepository.findByUuid(uuid)
.orElseThrow(() -> new EntityNotFoundException(COMPANY));
company.setName(companyRequest.getName());
final Company savedCompany = companyRepository.save(company);
return new CompanyDTO(savedCompany);
}
更新:最后我让它工作了,但我不确定某些部分。下面的测试方法有什么遗漏或多余的吗?
@InjectMocks
private CompanyServiceImpl companyService;
@Mock
private CompanyRepository companyRepository;
@Captor
ArgumentCaptor<Company> companyCaptorEntity;
@Test
public void testUpdate() {
final UUID uuid = UUID.randomUUID();
final CompanyRequest request = new CompanyRequest();
request.setName("Updated Company Name");
final Company company = new Company();
company.setName("Company Name");
when(companyRepository.findByUuid(uuid))
.thenReturn(Optional.ofNullable(company));
//??? Do we need this?
when(companyRepository.save(any())).thenReturn(company);
CompanyDTO result = companyService.update(request, uuid);
Mockito.verify(companyRepository).save(companyCaptor.capture());
Company savedCompany = companyCaptor.getValue();
assertEquals(request.getName(), savedCompany.getName());
}
【问题讨论】:
标签: java unit-testing testing junit junit5