Mockito(Junit)无法遍历 JSONArray 对象

我正在尝试为 DataHandler.java 类编写一个单元测试,这反过来又从 SchemaParsor 类调用parseDebeziumSchema方法。


此方法将字符串转换为 JSONArray,但是当我尝试使用when(schemaParsor.parseDebeziumSchema(json)).thenReturn(jsonArray);它来模拟它时,会抛出java.lang.NoSuchMethodError: org.json.JSONArray.iterator()Ljava/util/Iterator异常。


完整的堆栈跟踪如下,我还附上了DataHandler 类、DataHandlerTest 类和parseDebeziumSchema 方法代码:


java.lang.NoSuchMethodError: org.json.JSONArray.iterator()Ljava/util/Iterator;


at com.xoom.transformer.dbschemahandler.SchemaParsor.parseDebeziumSchema(SchemaParsor.java:43)

at com.xoom.transformer.utils.DataHandlerTest.testdataProcessor(DataHandlerTest.java:52)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)


慕神8447489
浏览 131回答 1
1回答

慕妹3242003

你的测试有两个问题:调用存根必须在实际交互之前配置。所以只需交换这些行:dataHandler.dataProcessor(json, topic_name, partition);when(schemaParsor.parseDebeziumSchema(json)).thenReturn(jsonArray); //stub parseDebeziumSchemaMockito.verify用于验证与模拟的交互。但是在您的代码中,您正在验证对被测对象的方法调用。您看不到此错误,因为您的代码在第 1 点中断。删除此行:verify(dataHandler, Mockito.times(1)).dataProcessor(json, topic_name, partition);总而言之,您的代码应如下所示。我还添加了schemaParsor.parseDebeziumSchema(json)仅调用一次的验证@Testpublic void testdataProcessor() throws JsonParseException, JSONException {    jsonObject.put("field","recipe_name");    jsonObject.put("type","string");    jsonArray.put(jsonObject);    when(schemaParsor.parseDebeziumSchema(json)).thenReturn(jsonArray); //stub parseDebeziumSchema    dataHandler.dataProcessor(json, topic_name, partition);    verify(schemaParsor, times(1)).parseDebeziumSchema(json); //verify that parseDebeziumSchema is called exactly once}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java