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

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

@AbdullinAM

Description

@AbdullinAM

Функция 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

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions