亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Mockito(Junit)無法遍歷 JSONArray 對象

Mockito(Junit)無法遍歷 JSONArray 對象

慕神8447489 2022-06-08 17:28:53
我正在嘗試為 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)
查看完整描述

1 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

你的測試有兩個問題:


調用存根必須在實際交互之前配置。所以只需交換這些行:

dataHandler.dataProcessor(json, topic_name, partition);

when(schemaParsor.parseDebeziumSchema(json)).thenReturn(jsonArray); //stub parseDebeziumSchema

Mockito.verify用于驗證與模擬的交互。但是在您的代碼中,您正在驗證對被測對象的方法調用。您看不到此錯誤,因為您的代碼在第 1 點中斷。刪除此行:

verify(dataHandler, Mockito.times(1)).dataProcessor(json, topic_name, partition);

總而言之,您的代碼應如下所示。我還添加了schemaParsor.parseDebeziumSchema(json)僅調用一次的驗證


@Test

public 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

}


查看完整回答
反對 回復 2022-06-08
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號