无法在Kotlin JUnit 4测试中捕获异常

时间:2018-04-11 09:53:40

标签: java android junit kotlin

我想在单元测试中检查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)
}

在调试器中评估相同的表达式表明应抛出异常,但永远不会被捕获。

为什么会这样?

我在Android工作室Android项目中使用JUnit 4.12hamcrest-library:1.3Kotlin 1.2.31

修改 正如这里指出的那样https://stackoverflow.com/a/32822468/3708094 JSONObject是android框架的一部分,在单元测试中不可用。这很可能与上述问题的原因有关。

即使它不可用,也不会捕获异常,但根据调试器评估工具会抛出一些异常。

1 个答案:

答案 0 :(得分:0)

正如所怀疑的那样,问题的根源在于JSONObject是Android系统库的一部分。

对我来说,解决方案是手动将gradle中的JSONObject添加到testImplementation

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