【发布时间】:2021-10-14 17:29:18
【问题描述】:
这是我想测试的方法,certificateRepository 看到一个模拟,QueryFiltersConfig config 是我传递给该模拟方法的对象。我使用 JUnit 5 作为测试框架。
@Override
public List<GiftCertificateDto> fetchCertificatesWithFilters(Optional<String> tagName, Optional<List<String>> sortTypes, Optional<String> searchPattern) {
QueryFiltersConfig.Builder filterConfigBuilder = QueryFiltersConfig.builder();
tagName.ifPresent(filterConfigBuilder::withTag);
addSortsToConfig(sortTypes, filterConfigBuilder);
searchPattern.ifPresent(filterConfigBuilder::withSearchPattern);
QueryFiltersConfig config = filterConfigBuilder.build();
return certificateRepository.findWithFilters(config).stream()
.map(dtoTranslator::giftCertificateToDto).collect(Collectors.toList());
}
在这种情况下,我该如何编写模拟初始化(Mockito.when(...) 语句)?或者也许我应该反过来做?如果是这样 - 如何?
【问题讨论】:
-
“模拟初始化”具体是什么意思?通常你只说
var mockCr = mock(CertificateRepository.class)和new GiftCertificateService(mockCr)。 -
我指的是写
Mockito.when(...)语句 -
您的
certificateRepository字段是如何设置的?你用任何 DI 框架注入它吗? -
不,我用
@InjectMocks注解 -
@Felipe 回答完成了这项工作。但我在我的情况下找到了更合适的方法。因为我没有测试与
QueryFiltersConfig相关的逻辑,所以我在findWithFilters()方法上使用了Mockito.any()。
标签: java unit-testing junit mocking mockito