当前位置: 首页 > 知识库问答 >
问题:

ArgumentMatchers.any不能为空

柳高卓
2023-03-14
@Test
fun emitValueIfCountIs7() {
    doAnswer { invocation: InvocationOnMock ->
        val subscriber: mViewModel.CountSubscriber = invocation.getArgument(0)
        subscriber.onNext(7)
        null
    }.`when`(countUseCase).execute(
        ArgumentMatchers.any(mViewModel.CountSubscriber::class.java),
        ArgumentMatchers.any(Parameters::class.java)
    )
    
    // When
    mViewModel.getCount()
    
    // Verify
    assert(mViewModel.countResponse.value != null)
}
testImplementation 'junit:junit:4.12'
testImplementation "org.mockito:mockito-inline:2.23.4"
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0"

以下是我的进口:

import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.nhaarman.mockitokotlin2.doAnswer
import io.reactivex.Observable
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mockito.ArgumentMatchers.any
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.MockitoAnnotations
import org.mockito.invocation.InvocationOnMock

奇怪的是,它以前曾经工作过,我不知道发生了什么会影响这一点。

共有1个答案

傅朝
2023-03-14

让配对员和科特林一起工作可能是个问题。如果有一个用kotlin编写的方法没有接受可空参数,那么我们就不能使用mockito.any()与它匹配。这是因为它可以返回void,并且不能将其赋值给不可为空的参数。

如果匹配的方法是用Java编写的,那么我认为它将工作,因为所有Java对象都是隐式可空的。

一个可能的解决方案是使用像mockito-kotlin这样的库,但是您可以通过自己的几行代码轻松地解决这个问题。

private fun <T> any(type: Class<T>): T = Mockito.any<T>(type)
object MockitoHelper {
fun <T> anyObject(): T {
    Mockito.any<T>()
    return uninitialized()
}
@Suppress("UNCHECKED_CAST")
   fun <T> uninitialized(): T =  null as T
}

在kotlin测试中使用mockitoHelper.anyObject()而不是any()

您可以在这篇文章中找到更多信息:使用Mockito和Kotlin

在这个帖子中有一个关于可能解决方案的讨论:在Kotlin中是否可能使用Mockito?

 类似资料:
  • 尊敬的开发者们。 我要问你一个问题,我觉得很难为我解决,只是因为我不知道为什么要回答,我的意思是什么??让我看看。JBoss文档中的关联没有得到全面的答案:为什么我应该使用JoinTable而不是外键,并且我不完全理解映射是如何工作的,我这样说是什么意思?我知道什么是协会是ManyToMany或ManyToOne等,他们的目的是什么,但他们如何工作和协作彼此不需要回答关于双向或单向或联合或协会,我

  • 问题内容: 下面是我的表结构 我正在执行查询,它向我显示列不能为空,这是我的查询 错误-列’physician_minc’不能为空 不是必填字段。我该如何解决这个问题? 问题答案: 您已将not null值定义为’physician_minc’: 如何将null值传递给它。首先,您需要将列设置为null,然后才可以传递所需的null值。

  • 本文向大家介绍sqlserver登陆后报不能为空不能为null的错误,包括了sqlserver登陆后报不能为空不能为null的错误的使用技巧和注意事项,需要的朋友参考一下 sql server 2012 值不能为null。参数名:viewinfo (microsoft.sqlserver.managemenmen) 是因为在C:\Users\你的用户名\AppData\Local\Temp\中,缺

  • 我是编程初学者。当我启动我的应用程序时,我有一条错误消息,不知道如何处理代码。有人能帮我吗? 这是我的代码: 活动: 片段: 适配器: 错误堆栈跟踪: 2020-02-01 13:37:17.972 10729-10729/?E/AndroidRuntime: FATAL EXCEPTION: main Process:hread.main, PID: 10729hread.java:6494Ru

  • 问题内容: 我创建了一个包含三列Id,Name,Quantity的表。看来,当我尝试插入至少包含一个空列的行或试图将列的默认值设置为NULL时,数据库会引发错误。 #1048-列“数量”不能为空 如何将NULL设置为列的有效值? 问题答案: 用您的实际数据类型替换,但没有限制。 要显示当前的列定义,请运行 在(命令行客户端)

  • 我每次点击提交按钮都会出现这个错误。其他所有内容都提交到数据库,只有图像没有提交。警告:file\u get\u contents():文件名不能为空。你知道吗?这是我的密码。