0
我正在爲下面提供的方法編寫測試。 `反應堆switchifempty不像預期的那樣在junit測試中
class ScrapedRecipeCache @Autowired constructor(private val cache: RecipeScrapingCacheService,
private val recipeService: RecipeService) : ScrapedRecipeProvider {
override fun provide(request: ScrapingRequest): Flux<ScrapedRecipe> =
cache.retrieve(request.link)
.doOnNext { println(it) }
.flatMap { (link, _, recipeHash, error) ->
recipeService.findByHash(recipeHash)
.map { ScrapedRecipe(it, link, error)}
.switchIfEmpty(cache.remove(request.link).then(Mono.empty()))
}
.flux()
}
` 測試如下所示:
private val recipeFetched = Recipe("Tortellini", RecipeDifficulty.EASY, 15.0)
val cacheContents = RecipeScrapingResource("www.google.com", ScrapingOrigin.JAMIE_OLIVER, recipeFetched.hash,
mutableListOf(
pl.goolash.core.Exception("aa", ErrorType.WARNING, LocalDateTime.MIN)
))
val request = ScrapingRequest("www.google.com", ScrapingOrigin.JAMIE_OLIVER, 4)
@BeforeEach
fun setUp() {
given(cache.retrieve("www.google.com")).willReturn(Mono.just(cacheContents))
given(recipeService.findByHash(recipeFetched.hash)).willReturn(Mono.just(recipeFetched))
}
@Test
@DisplayName("Then return data fetched from service and don't delete cache")
fun test() {
cacheFacade.provide(request)
.test()
.expectNext(ScrapedRecipe(recipeFetched, "www.google.com", cacheContents.error!!))
.expectComplete()
.verify()
BDDMockito.verify(cache, BDDMockito.never()).remove(request.link)
}
的測試,因爲cache.remove(request.link)被稱爲失敗。據我的理解(或從我從文檔中收集的內容)switchIfEmpty,只應在recipeService.findByHash返回Mono.empty()時觸發。然而,調試器顯示它返回Mono.just(fetchedRecipe)的模擬值。
有趣的是,當我與
.switchIfEmpty(Mono.just(1).doOnNext{println("weeee")}.then(Mono.empty()))
更換
.switchIfEmpty(cache.remove(request.link).then(Mono.empty()))
然後WEEE沒有因此印刷它的表現不如預期,這是switchIfEmpty不被解僱。
此外,測試問題在集成測試中正常運行,並且不清除緩存。
反應堆版本:3.1.0-RC1 其他值得注意的細節:春啓動2.0.0-M4,的Mockito核心:2.10,JUnit的5,項目是寫在科特林
的問題是,沒有任何人看到這有什麼不對?因爲我已經花了兩天時間,但仍然不知道爲什麼這個表現如此b。。