如何模拟弹簧豆的特定方法



我有一个带有多个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。

相关内容

  • 没有找到相关文章

最新更新