Как получить класс Java из объекта в Kotlin? - PullRequest
0 голосов
/ 08 июня 2019

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

1 Ответ

2 голосов
/ 08 июня 2019

Если вы утверждаете против java.lang.Long, используйте Long?::class.java.Long::class.java даст вам примитив long в JVM.Nullable Long вместо сопоставления с коробочной версией - java.long.Long.

...