junit Kotlin.嘲笑:每一个内的未接模拟呼叫

z31licg0  于 2022-11-11  发布在  Kotlin
关注(0)|答案(1)|浏览(146)

我正在使用mockk库来测试我的业务逻辑。我有一个交互器,我想测试它。我的交互器在构造函数数据类中检索。例如:

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)

在我的测试里面我试图做出部分嘲讽:

@MockK
  private lateinit var test: Test 

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

}

我得到错误:
每个{...}块内丢失的模拟调用:请确保块中的对象是模拟io. mock.mockKException:每个{...}块内丢失的模拟调用:确保块内的对象是一个模拟对象
我也试着这样写:

every { test } returns mockk {
            every { data1 } returns Data1("test")
        }

我得到同样的错误。@RelaxedMockK也不工作。
为什么会这样?请帮帮我。

m0rkklqb

m0rkklqb1#

你在嘲笑它两次,你不需要这样做。去掉第一次嘲笑,你会得到这样的结果:

private lateinit var test: Test

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

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

相关问题