5

我注意到有时会verify因“......调用......发生,但参数不匹配”而失败

这是一个显示验证失败的示例测试:

class TestStuff {

    val stuff = "1"

    @RelaxedMockK
    lateinit var testService: TestService

    @RelaxedMockK
    lateinit var testInterface: TestInterface

    @Before
    fun setup() {
        MockKAnnotations.init(this)

        every { testInterface.testStuff } returns stuff
    }

    @Test
    fun testStuffCalled() {
        testService.testStuff(testInterface.testStuff)

        verify { testService.testStuff(testInterface.testStuff) }
    }
}

interface TestInterface {
    val testStuff: String
}

class TestService {

    fun testStuff(stuff: String) {
    }
}

如果我将带有验证调用的行更改为以下 2 行,那么它可以工作:

let testStuffCopy = testInterface.testStuff
verify { testService.testStuff(testStuffCopy) }
4

1 回答 1

2

我不确定这是否是一个错误,但一个快速的解决方法是stuff用作验证,因为您希望返回的值是它:

verify { testService.testStuff(stuff) }

这样,您仍然可以测试该行为是否被调用,并且当您模拟 return 的testInterfacereturn 时stuff,这应该可以工作。

我为此在 Mockk 中创建了一个问题,当那里有更新时我会更新这个答案。

于 2018-02-21T18:28:14.013 回答