首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科特林。莫克:每一个人都错过了嘲弄的电话

科特林。莫克:每一个人都错过了嘲弄的电话
EN

Stack Overflow用户
提问于 2022-07-15 21:56:44
回答 1查看 617关注 0票数 0

我正在使用mockk库来测试我的业务逻辑。我有我想要测试的交互设备。我的interactor在构造函数数据类中检索。Fox例子:

代码语言:javascript
复制
 data class Test(
        var data1: Data1? = null,
        var data2: Data2? = null,
        var data3: Data3? = null
        // etc
    )


    data class Data1(var nestedData: String)
    data class Data2(var test: String)
    data class Data3(var test: String)

在我的测试中,我试图进行部分的嘲弄:

代码语言:javascript
复制
  @MockK
  private lateinit var test: Test 

  @Test
  fun `test`() {
         every { test } returns mockk {
            every { data1 } returns mockk {
                every { nestedData } returns "test"
            }
        }

}

我得到了错误:

缺失模拟每个{.}块中的调用:确保块中的对象是模拟的io.mockk.MockKException:在每个{.}块中缺少模拟调用:确保块内的对象是模拟的

我也试着这样写:

代码语言:javascript
复制
   every { test } returns mockk {
            every { data1 } returns Data1("test")
        }

我也会犯同样的错误。@RelaxedMockK也不起作用。

为什么会发生这种事?请帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-20 11:39:05

你在嘲弄它两次,你不需要它。删除第一个模拟,您将得到如下内容:

代码语言:javascript
复制
    private lateinit var test: Test

    @Test
    fun `test`() {
        test = mockk(relaxed = true) {
            every { data1 } returns mockk {
                every { nestedData } returns "test"
            }
        }
    }

如果需要为每个测试设置相同的测试,则可以将创建模拟对象的这一部分移动到@ same函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72999951

复制
相关文章

相似问题

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