首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Kotlin中创建带有构造函数参数的Mockito mock?

如何在Kotlin中创建带有构造函数参数的Mockito mock?
EN

Stack Overflow用户
提问于 2019-04-16 05:34:28
回答 1查看 2.1K关注 0票数 1

我想使用doReturn(sth).when(underTest).someFunc()而不是when(underTest.someFunc()).thenReturn(sth)

(我不想在someFunc() -https://stackoverflow.com/a/29394497/541624中实际执行任何东西)

在Java语言中,我可以做underTest = Mockito.spy(new SomeClass(someParam));

我得到了:

代码语言:javascript
复制
Mockito cannot mock/spy because :
 - final class
EN

回答 1

Stack Overflow用户

发布于 2019-04-16 23:06:33

不能模拟/监视Kotlin类的原因是它们是最终类(默认情况下)。所以Mockito不能模拟这样的类,除非你把关键字open

Mockito版本2引入了一个特性,允许您模拟/监视最终类。

该怎么做呢?添加带有其他模拟v2依赖项的mockito-inline依赖项。例如:testImplementation 'org.mockito:mockito-inline:2.8.9'

然后照常使用mockito方法。

这是一个虚拟测试,它演示了如何模拟一个方法而不做任何事情。

代码语言:javascript
复制
class Foo {
    var xval = 0
    fun foo(x: Int, y: Int): Int = x / y

    fun bar(x: Int) {
        xval = x
    }
}

class FooTest {
    @Test
    fun fooTest() {
        val foo = Mockito.mock(Foo::class.java)
        Mockito.doAnswer(Answers.RETURNS_DEFAULTS).`when`(foo).foo(10, 2)

        assertEquals(0, foo.foo(10, 2))

        Mockito.doNothing().`when`(foo).bar(100)

        assertEquals(0, foo.xval)
    }
}

正如您所看到的,您可以为返回某些内容的方法返回默认值,或者不为void方法返回任何内容。

否则,您可以使用没有此问题的mockk https://mockk.io/库。

说到这里,我建议您考虑一下是否可以使用接口/抽象类,而不是这里的具体类。这是使用mocking抽象化依赖的最好方法。

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

https://stackoverflow.com/questions/55697545

复制
相关文章

相似问题

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