Kotlin协同工具使用生产和mockito来嘲笑生产工作

我在我的Android应用程序中测试Kotlin协同程序,我正在尝试执行以下unit testing

@Test fun `When getVenues success calls explore venues net controller and forwards result to listener`() = runBlocking { val near = "Barcelona" val result = buildMockVenues() val producerJob = produce<List>(coroutineContext) { result.value } whenever(venuesRepository.getVenues(eq(near))) doReturn producerJob // produce corooutine called inside interactor.getVenues(..) interactor.getVenues(near, success, error) // call to real method verify(venuesRepository).getVenues(eq(near)) verify(success).invoke(argThat { value == result.value }) } 

交互方法如下

 fun getVenues(near: String, success: Callback, error: Callback) = postExecute { repository.getVenues(near).consumeEach { venues -> if (venues.isEmpty()) { error(GetVenuesResult(venues, Throwable("No venues where found"))) } else { success(GetVenuesResult(venues)) } } } 

postExecute{..}BaseInteractor上的一个方法,它通过自定义的执行程序在ui线程中执行函数,该自定义执行程序使用kotlin android协程库中的launch(UI)协程

 fun  postExecute(uiFun: suspend () -> T) = executor.ui(uiFun) 

然后, repository.getVenues(..)函数也是一个协程,它使用produce(CommonPool) {}返回ProducerJob。

问题是它接缝交互函数中的成功回调似乎并没有被执行

 verify(success).invoke(argThat { value == result.value }) 

不过,在调试时,我确实看到了交互函数中的执行达到了consumeEachif (venues.isEmpty())行, consumeEach那里退出并继续执行测试,显然无法validation成功回调。

我在协程上有点新,所以任何帮助,将不胜感激。

One Solution collect form web for “Kotlin协同工具使用生产和mockito来嘲笑生产工作”

我想出了这一个。 我看到问题出在这个生成协程,而不是其他的测试,也使用协程,并且工作得很好。 我注意到我实际上错过了模拟的ProducingJob上的发送,以便实际上产生一个值,在这个例子中是模拟列表。 我只是补充说,改变生产工作的模拟

 val producerJob = produce { send(result.value) } 
  • unit testing使用kotlin协同程序的翻新调用
  • Androidunit testing没有被嘲笑
  • Kotlin协同程序:测试Android Presenter时切换上下文
  • Android Studio 3 / Kotlin代码覆盖
  • ReferenceError:ok没有在Kotlin Javascript的QUnitAsserter.assertTrue中定义
  • 如何使用Gradle和Kotlin创建单独的测试?
  • Android测试运行时不需要启动模拟器(选择设备对话框不会出现) - 空的测试套件
  • 与Kotlin测试异步失败的Mockito
  • doReturn不作为代理,但调用我的方法
  • 为什么$ MockitoMock $实例不被识别为模拟?
  • 在kotlinunit testing中获得lambda捕获器的调用计数
  • Kotlin language will be the best programming language for Android.