首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跳过使用MockK或Mockito运行方法?

如何跳过使用MockK或Mockito运行方法?
EN

Stack Overflow用户
提问于 2022-08-02 06:57:25
回答 1查看 523关注 0票数 0

当我只想测试一个方法在其他方法中被调用时,我怎么做呢?我不希望在调用该方法之后运行它。

代码语言:javascript
复制
fun aMethod(){
   bMethod()
}

fun bMethod(){
   // complex 
}

我试过这个。但没起作用。

代码语言:javascript
复制
@Test
fun test(){
    coEvery{ mClass.bMethod() } just runs

    mClass.aMethod()

    verify { mClass.bMethod() wasNot Called }
}
代码语言:javascript
复制
@Test
fun test(){
    coEvery{ mClass.bMethod() } returns Unit

    mClass.aMethod()

    verify { mClass.bMethod() wasNot Called }
}
代码语言:javascript
复制
@Test
fun test(){
    coEvery{ mClass.bMethod() } answers { Unit }

    mClass.aMethod()

    verify { mClass.bMethod() wasNot Called }
}

我也尝试用called代替Called(小写和大写C)。

他们都不起作用。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-08-11 10:59:27

在你的问题中有很多问题或事情是不清楚的:

  • 您不需要使用coEvery来存根bMethod,因为它不是一个挂起函数。您可以通过以下事实看到这一点:在suspend声明的开头没有bMethod关键字。您可以而且应该使用常规的instead.
  • verify { xy wasNot Called }来验证没有调用模拟xy的任何函数。如果要验证单个函数bMethod没有被调用,则应该检查它是否被调用0次:

代码语言:javascript
复制
verify(exactly = 0) { mClass.bMethod() } 

  • --您是在顽固地使用bMethod,而不是aMethod --这让我假设mClass不是模拟的,而是间谍,并且您打算在调用mClass.aMethod时调用aMethod的实际实现。由于bMethod是在aMethod中调用的,所以您对bMethod未被调用的验证总是失败的,因为它实际上是被调用的。verify不关心是否调用了真正的实现或模拟的实现。因此,为了获得成功的验证,您应该将测试更改为模拟aMethod,这样它就不会真正调用bMethod,或者应该验证调用bMethod一次(或至少一次)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73203208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档