0

我正在尝试mockito模拟一个getValue使用 java 类作为参数的函数。

为了简化,我做了以下测试:

@Test
fun test1() {
    val map = HashMap<String,Any>()
    val v:Long = 1L 
    map["K"]= v

    println(map["K"]!!::class.java) //prints class java.lang.Long
    println(Long::class.java) //prints long

    val dss = Mockito.mock(DataSnapshot::class.java)

    Mockito.`when`(dss.getValue( map["K"]!!::java.class))
            .thenReturn( map["K"]!!)

    //production code uses calls the function like this but it fails to get the value. Returns null;
    Assert.assertEquals( map["K"],dss.getValue(Long::class.java))
}

如印刷品所示,输入的类型与map["K"]!!::class.java不同Long::class.java

如果我使用内联类型模拟该方法,它可以工作:

Mockito.`when`(dss.getValue( Long::class.java))
            .thenReturn( map["K"]!!)

我怎样才能以类型参数不由长开关逻辑确定的方式模拟该方法?

kotlin 和 java 类型中的一些内容可能会有所帮助。

4

1 回答 1

2

如果您反对java.lang.Long,请使用Long?::class.java. Long::class.java将为您提供longJVM 上的原语。NullableLong而是映射到盒装版本 - java.long.Long.

于 2019-06-08T00:45:37.417 回答