Функция расширения kotlin в assertj - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь реализовать функцию расширения в моем тесте с assertj. У меня есть пользовательское исключение, подобное этому:

class MyException: Exception {
        constructor(message: String, code: Int) : super(message)
        constructor(cause: Throwable, code: Int) : super(cause)
}

Я бы хотел проверить свойство code в моем тесте. к сожалению, мы используем java assertj, поэтому я попытался реализовать функцию расширения.

У меня есть следующее, мой тест:

@Test
fun `Creating webdto without name fails`() {
    assertThatExceptionOfType(MyException::class.java)
            .isThrownBy { service.create(WebDto.apply { this.name = null }) }
            .withMessageContaining("Bean validation error.")
            .withErrorCodeContaining(1) // extension function
}

private fun <T : Throwable?> ThrowableAssertAlternative<T>.withErrorCodeContaining(expectedErrorCode: ErrorCode): ThrowableAssertAlternative<T> {
    // How can I access the actual or delegate parameter?
    return this
}

У меня нет шансов получить параметр actual или delegate в моем withErrorCodeContaining

Есть идеи? заранее спасибо

Ответы [ 2 ]

0 голосов
/ 11 июня 2018
fun <T : MyException?> ThrowableAssertAlternative<T>.withErrorCodeContaining(expectedErrorCode: Int):
    ThrowableAssertAlternative<T> = this.matches({ it?.code == expectedErrorCode },
        "ErrorCode from the RestApiException doesn't match with the expected: <\"$expectedErrorCode\">")

Это решение, над которым я работал и ожидал

0 голосов
/ 12 мая 2018

Не совсем то, что вы ищете, но достигнете того, что вы хотите.

Согласно документации https://joel -costigliola.github.io / assertj / assertj-core-features-highlight.html # исключение-утверждение , вы можете использовать

val thrown: MyException = (MyException)catchThrowable { 
    service.create(WebDto.apply { this.name = null })
} as MyException

assertThat(thrown.message).isEqualTo("Bean validation error.")
assertThat(thrown.code).isEqualTo(1)
...