Котлин опечатал класс и тип вывод - PullRequest
0 голосов
/ 30 апреля 2019

я использую запечатанный класс, чтобы сообщить клиенту об успехе или ошибке:

sealed class Result<out T : Any> {
    data class Success<out T : Any>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
}

Но я застрял, получив даже самый простой модульный тест для его компиляции:

    val error = Result.Error(IOException("message"))
    assertThat(error, instanceOf(Result.Error::class.java))

Я получаю сообщение: Ошибка вывода типа. Недостаточно информации для вывода параметра T в fun instanceOf (тип: Class <*>): Matcher!

Похоже, я упустил что-то важное в Котлине.

Спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 30 апреля 2019

нет проблем с вашим кодом для меня.

import org.hamcrest.CoreMatchers.instanceOf
import org.junit.Test

import org.junit.Assert.*
import java.io.IOException

class ExampleUnitTest {
    @Test
    fun test1() {
        val error = Result.Error(IOException("message"))
        assertTrue(error is Result.Error)
    }

    @Test
    fun test2() {
        val error = Result.Error(IOException("message"))
        assertThat(error , instanceOf(Result.Error::class.java))
    }

    sealed class Result<out T : Any> {
        data class Success<out T : Any>(val data: T) : Result<T>()
        data class Error(val exception: Exception) : Result<Nothing>()
    }
}

Кроме того, я предлагаю вам использовать ключевое слово is, чтобы проверить, является ли ваш класс экземпляром чего-либо в kotlin (как в test1)

0 голосов
/ 03 мая 2019

Похоже, я искал в ложном API.Поскольку я в основном использую assertj.Ниже код чистый и свободный для чтения

assertThat(result).isInstanceOf(Result.Error::class.java)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...