Не удалось поймать исключение в тесте kotlin junit 4

Я хочу проверить, имеет ли String допустимый формат JSON в модульных тестах.

Для этого я пытаюсь создать новый объект JSONObject из строки и перехватить любые возможные исключения, которые могут быть сгенерированы.

Однако при запуске приведенного ниже кода исключение не обнаруживается.

@Test
fun checkFunctionWithStringToJSONTest() {
    val invalidJSON = "INVALIDJSON--"
    try {
        JSONObject(invalidJSON)
    } catch (ex: Exception) {
        try {
            JSONArray(invalidJSON)
        } catch (ex1: Exception) {
            assert(false)
        }
    }
    assert(true)
}

Оценка того же выражения в отладчике показывает, что исключение должно быть выдано, но никогда не перехватывается.

Почему это происходит?

Я использую JUnit 4.12, hamcrest-library:1.3 и Kotlin 1.2.31 в проекте Android studio Android

РЕДАКТИРОВАТЬ: Как указано здесь https://stackoverflow.com/a/32822468/3708094 JSONObject является частью платформы Android и недоступен в модульных тестах. Скорее всего, это связано с причиной поставленного выше вопроса.

Даже если он недоступен, исключение не обнаруживается, но что-то выбрасывается в соответствии с инструментом оценки отладчика.

Может быть, это Throwable, а не Exception?

Alexey Romanov 11.04.2018 16:18
Method threw 'java.lang.RuntimeException' exception. Cannot evaluate org.json.JSONObject.toString(). Так что это было исключение. К счастью, это подтолкнуло меня к правильному пути определения отсутствующего пакета org.json в моих модульных тестах.
RWIL 12.04.2018 09:05
1
2
456
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как и предполагалось, проблема связана с тем, что JSONObject является частью системных библиотек Android.

Для меня решение заключалось в том, чтобы вручную добавить JSONObject в gradle в testImplementation.

dependencies {
    ...
   testImplementation 'org.json:json:20180130'
}

Другие вопросы по теме