0

在 android 应用程序上,具有 java 功能

JSONObject addToJson(@NonNull JSONObject jsonObject, @NonNull String key, boolean value){
        try {
            jsonObject.put(key, value);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return jsonObject;
    }

测试代码,它在调用模拟 jsonObject.put(key, value) 时抛出并且工作正常:

    @Test
    public void test_addToJson() throws JSONException {
        JSONObject jsonObject = Mockito.spy(new JSONObject());
        Mockito.when(jsonObject.put(anyString(), anyBoolean())).thenThrow(new JSONException("!!! test forced exception"));
        JSONObject outputObject = addToJson(jsonObject, "null", true);
        assertEquals("jsonobject length should match", 0, outputObject.length());
    }

转换为 kotlin 后

    fun addToJson(jsonObject: JSONObject, key: String, value: Boolean?): JSONObject {
        try {
            jsonObject.put(key, value)
        } catch (e: JSONException) {         
            e.printStackTrace()
        }
        return jsonObject
    }

测试失败,没有抛出异常。

4

1 回答 1

1

Java 代码将原始类型boolean用于value. Kotlin 版本正在使用可空类型Boolean?,这似乎是不必要的,因为该参数永远不会出现null在 Java 版本中。

对可空类型的更改可能会导致anyBoolean匹配器失败。您可以尝试切换到不可为空的类型Boolean,或者继续使用Boolean?并将anyBoolean匹配器anyOrNull从 mockito-kotlin 更改为。

于 2022-01-12T14:30:05.560 回答