我有一个带有多个API的spring bean。模拟Bean不能达到我的目的,因为我想验证对具有相同输入的多次getCachedData()调用仅一次调用过的fetchFromDb()。这是为了确保结果被缓存。
调用getCachedData()时是否可以在bean“市场”上模拟fetchFromDb()?
样品分类
@Configuration("market")
public class AllMarket {
@Autowired
private CacheManager cachedData;
public boolean getCachedData(LocalDate giveDate) {
//check if it exists in cache
if(Objects.nonNull(checkCache(giveDate)) {
return checkCache(giveDate);
}
//fetch from database
boolean bool = fetchFromDb(givenDate);
cacheData(giveDate, bool);
return bool;
}
public boolean checkCache(LocalDate giveDate) {
return cacheManager.getData(givenDate);
}
public boolean fetchFromDb(LocalDate givenDate) {
//return the data from database
}
public void cacheData(LocalDate givenDate, boolean bool) {
cacheManager.addToCache(givenDate, bool);
}
}
答案 0 :(得分:2)
您可以使用Mockito.spy()
进行这种测试。在这种情况下,您应该监视AllMarket
实例并存根fetchFromDb
。最后,您可以Mockito.verify
被fetchFromDb
调用一次。看起来像这样:
AllMarket spy = spy(allMarket);
when(spy.fetchFromDb(givenDate)).thenReturn(true); //you have boolean as a return type
...
verify(spy, times(1)).fetchFromDb(givenDate);
有关更多信息,您可以查看Official Mockito doc
答案 1 :(得分:0)
也许mimito参数捕获者可以帮助您。它使您可以捕获方法输入以及调用方法的次数以及其他功能。请检查https://www.baeldung.com/mockito-annotations。