這是我想通過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(...)在這種情況下如何撰寫模擬初始化(陳述句)?或者也許我應該反過來做?如果是這樣 - 如何?
uj5u.com熱心網友回復:
使用ArgumentCaptor允許您捕獲傳遞給方法的引數以對其進行檢查。當您無法訪問我們要測驗的方法之外的引數時,這尤其有用。這是一個很好的參考。
讓我試著根據你的方法舉一個例子。我假設您有一個名為的服務YourService,您可以使用@InjectMocks注釋將模擬的CertificateRepository.
然后您使用
@CaptorArgumentCaptor 型別的欄位QueryFiltersConfig來存盤我們捕獲的引數。Mockito.verify使用 ArgumentCaptor 來捕獲QueryFiltersConfig和捕獲引數configCaptor.getValue()使用斷言檢查捕獲的值。
@RunWith(MockitoJUnitRunner.class)
public class CertificateRepositoryTest {
@Mock
CertificateRepository certificateRepository;
@InjectMocks
YourService yourService;
// 1
@Captor
ArgumentCaptor<QueryFiltersConfig> configCaptor;
@Test
public void testWithCaptor() {
// 2 - call your service and let it do whatever it needs
// with the parameter passed to it
yourService.fetchCertificatesWithFilters(parameters);
// 2 - capture the object created inside your service
Mockito.verify(certificateRepository)
.findWithFilters(configCaptor.capture());
QueryFiltersConfig value = configCaptor.getValue();
// 3 - and make sure that the value is correct
assertEquals(expectedValue, value);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324863.html
上一篇:angular單元測驗cdkDragEnteredwithjasmine
下一篇:在Jest中模擬匯入的函式
