我想在单元测试中检查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.12
,hamcrest-library:1.3
和Kotlin 1.2.31
修改 正如这里指出的那样https://stackoverflow.com/a/32822468/3708094 JSONObject是android框架的一部分,在单元测试中不可用。这很可能与上述问题的原因有关。
即使它不可用,也不会捕获异常,但根据调试器评估工具会抛出一些异常。
答案 0 :(得分:0)
正如所怀疑的那样,问题的根源在于JSONObject是Android系统库的一部分。
对我来说,解决方案是手动将gradle中的JSONObject添加到testImplementation
dependencies {
...
testImplementation 'org.json:json:20180130'
}