android,为什么转换为 kotlin 后单元测试失败
android, why after covert to kotlin the unit test fail
在 android 应用上,具有 java 功能
JSONObject addToJson(@NonNull JSONObject jsonObject, @NonNull String key, boolean value){
try {
jsonObject.put(key, value);
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject;
}
测试代码,它在调用 mock 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
}
测试失败,没有抛出异常。
Java 代码对 value
使用原始类型 boolean
。 Kotlin 版本使用可空类型 Boolean?
这似乎是不必要的,因为在 Java 版本中参数永远不会是 null
。
更改为可空类型可能会导致 anyBoolean
匹配器失败。您可以尝试切换到不可为 null 的类型 Boolean
,或者继续使用 Boolean?
并将 anyBoolean
匹配器从 mockito-kotlin 更改为 anyOrNull
。
在 android 应用上,具有 java 功能
JSONObject addToJson(@NonNull JSONObject jsonObject, @NonNull String key, boolean value){
try {
jsonObject.put(key, value);
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject;
}
测试代码,它在调用 mock 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
}
测试失败,没有抛出异常。
Java 代码对 value
使用原始类型 boolean
。 Kotlin 版本使用可空类型 Boolean?
这似乎是不必要的,因为在 Java 版本中参数永远不会是 null
。
更改为可空类型可能会导致 anyBoolean
匹配器失败。您可以尝试切换到不可为 null 的类型 Boolean
,或者继续使用 Boolean?
并将 anyBoolean
匹配器从 mockito-kotlin 更改为 anyOrNull
。