gpt4 book ai didi

android - Mockito.verify 没有看到方法执行,即使它是

转载 作者:行者123 更新时间:2023-11-29 00:53:22 25 4
gpt4 key购买 nike

我的错误: Error I have错误代码:

@RunWith(PowerMockRunner::class)
@PrepareForTest(PotatoProvider::class, PotatoConsumer::class)
class WantedButNotInvoked {
@Mock
lateinit var potatoConsumer: PotatoConsumer

@Test
fun potato() {
Observable.just(Potato()).subscribe(potatoConsumer)
verify(potatoConsumer).accept(Potato())
//verify(potatoConsumer).accept(any()) //-> This fails too with the same reason
}
}

data class Potato(val value: Int = 1)

class PotatoConsumer : Consumer<Potato> {
override fun accept(t: Potato?) {
println(t)
}
}

所以我使用这个 mock(potatoConsumer) 进行订阅,rxJava 调用了“accept”,mockito 将其标记为交互,但 mockito 认为这种交互不是我所期望的,为什么?

库的版本使用了她:

mockitoVersion = '2.8.9'
mockitoAndroidVersion = '2.7.22'
powerMockVersion="2.0.2"
kotlinMockito="2.1.0"
rxKotlin = "2.3.0"
rxJavaVersion = "2.2.10"

有点变通

  1. powermock 模拟的某些字段在“验证”时失败,但使用 mockito 模拟的字段则不然;
  2. 如果没有 mock-maker-inline,Mockito 无法模拟未打开的字段,但 mockito 与 Powermock mock-maker-inline 冲突;
  3. Powermock 可以将 mock-maker-inline 的调用委托(delegate)给其他 mock-maker-inline( https://github.com/powermock/powermock/wiki/PowerMock-Configuration )
  4. 在失败的字段上使用 Mockito.mock 而不是 @Mock/Powermock 模拟注入(inject)

使用 PowerMockRunner 的“绿色”马铃薯测试方法示例

    @Test
fun potato() {
potatoConsumer = mock() // <-
Observable.just(Potato()).subscribe(potatoConsumer)
verify(potatoConsumer).accept(potato)
}

最佳答案

我不熟悉 PowerMock 但我尝试了这个测试并且它通过了:

    @Test
fun potato() {

fakePotatoProvider = Mockito.mock(PotatoProvider::class.java)
potatoConsumer = Mockito.mock(PotatoConsumer::class.java)

`when`(fakePotatoProvider.getObservable()).thenReturn(Observable.just(Potato()))
fakePotatoProvider.getObservable().subscribe(potatoConsumer)
verify(potatoConsumer).accept(Potato())
}

关于android - Mockito.verify 没有看到方法执行,即使它是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57387708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com