Я пытаюсь 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 могут помочь.