我正在尝试mockito
模拟使用Java类作为参数的getValue
函数。
为简化起见,我做了以下测试:
@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类型的一些内幕可能会有所帮助。
答案 0 :(得分:2)
如果要针对java.lang.Long
断言,请使用Long?::class.java
。 Long::class.java
将为您提供JVM上的原始long
。可空的Long
会映射到盒装版本-java.long.Long
。