Skip to content
This repository has been archived by the owner on Sep 4, 2019. It is now read-only.

Неправильная работа тестов с assertThrows #15

Open
AbdullinAM opened this issue Dec 7, 2018 · 0 comments
Open

Comments

@AbdullinAM
Copy link

Функция assertThrows проверяет тип выброшенного исключения с помощью вызова isInstance, что не всегда корректно.
Пример со студенческим решением lesson6.task1.plusMinus

fun plusMinus(expression: String): Int {
    val parts = expression.split(" ")
    val result = mutableListOf(parts[0].toInt())
    ...
    return result.sum()
}

Если подать данному решению на вход строку "~JD*_c\\teH:QnPQudT,8z", оно выбросит NumberFormatException. А требуется, чтобы при неправильном формате строки выбрасывалось исключение IllegalArgumentException. При этом, тест вида:

assertThrows(IllegalArgumentException::class.java) { plusMinus("~JD*_c\\teH:QnPQudT,8z") }

отработает правильно, так как NumberFormatException является наследником IllegalArgumentException, и соответственно

IllegalArgumentException::class.java.isInstance(NumberFormatException())

возвращает true.

При этом, в котоеде выброшенные исключения проверяются через

modelException.javaClass == studentException.javaClass

и на том же самом тесте решение падает.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant