我有一个带有多个API的弹簧豆。嘲笑bean并不能达到我的目的,因为我想在多个呼叫的fetCheddata()上使用相同的输入来验证fetchfromdb()呼叫一次。这是为了确保结果被缓存。
在调用getCachedData()时,是否可以在bean'Market'上嘲笑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);
}
}
您可以使用Mockito.spy()
进行此类测试。在这种情况下,您应该监视您的AllMarket
实例和Stub 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);
有关更多信息,您可以看到官方的Mockito Doc
也许Mockito参数绑架者可能会因为您而言。它使您可以捕获方法输入以及调用了多少次方法,也可能使用其他功能。请检查https://www.baeldung.com/mockito-annotations。