首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在科特林能用莫基托吗?

在科特林能用莫基托吗?
EN

Stack Overflow用户
提问于 2015-05-18 13:58:34
回答 6查看 48.2K关注 0票数 93

我面临的问题是Matchers.anyObject()返回null。当用于模拟只接受非空类型的方法时,它会引发“不应该为空”异常。

代码语言:javascript
复制
`when`(mockedBackend.login(anyObject())).thenAnswer { invocationOnMock -> someResponse }

模拟方法:

代码语言:javascript
复制
public open fun login(userCredentials: UserCredentials): Response
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-05-18 16:16:38

有两种可能的解决办法:

代码语言:javascript
复制
private fun <T> anyObject(): T {
    Mockito.anyObject<T>()
    return uninitialized()
}

private fun <T> uninitialized(): T = null as T

@Test
fun myTest() {
    `when`(mockedBackend).login(anyObject())).thenAnswer { ... }
}

另一个解决办法是

代码语言:javascript
复制
private fun <T> anyObject(): T {
    return Mockito.anyObject<T>()
}

@Test
fun myTest() {
    `when`(mockedBackend).login(anyObject())).thenAnswer { ... }
}

下面是关于这个主题的更多讨论,首先提出解决办法。

票数 86
EN

Stack Overflow用户

发布于 2018-02-15 10:38:06

对于那些需要输入any(type: Class<T>)的人

代码语言:javascript
复制
    private fun <T> any(type: Class<T>): T = Mockito.any<T>(type)

这将有效,类型检查也会发生!

票数 51
EN

Stack Overflow用户

发布于 2018-01-04 08:48:54

您可以在Kotlin中使用以下助手函数来使用Mockito的any()、eq()和capture() matchers:

代码语言:javascript
复制
/**
 * Returns Mockito.eq() as nullable type to avoid java.lang.IllegalStateException when
 * null is returned.
 *
 * Generic T is nullable because implicitly bounded by Any?.
 */
fun <T> eq(obj: T): T = Mockito.eq<T>(obj)

/**
 * Returns Mockito.any() as nullable type to avoid java.lang.IllegalStateException when
 * null is returned.
 */
fun <T> any(): T = Mockito.any<T>()

/**
 * Returns ArgumentCaptor.capture() as nullable type to avoid java.lang.IllegalStateException
 * when null is returned.
 */
fun <T> capture(argumentCaptor: ArgumentCaptor<T>): T = argumentCaptor.capture()

请参阅蓝图存储库中的MockitoKotlinHelpers.kt

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

https://stackoverflow.com/questions/30305217

复制
相关文章

相似问题

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