Junit 如何在ApacheFlink中使用jsonobject测试数据流

Junit 如何在ApacheFlink中使用jsonobject测试数据流,junit,mockito,apache-flink,flink-streaming,Junit,Mockito,Apache Flink,Flink Streaming,我是测试新手,我正在尝试在Flink数据流上编写一个单元测试用例,该数据流接受jsonobject的输入,并将json对象传递给ProcessFunction,当满足以下特定规则条件时,它将返回一个有效或无效的jsonobject。这是junit测试用例,下面,我试图将process函数的输出jsonobject与输入文件的jsonobject进行比较 @Test public void testcompareInputAndOutputDataJSONSignal() throws Excep

我是测试新手,我正在尝试在Flink数据流上编写一个单元测试用例,该数据流接受jsonobject的输入,并将json对象传递给ProcessFunction,当满足以下特定规则条件时,它将返回一个有效或无效的jsonobject。这是junit测试用例,下面,我试图将process函数的输出jsonobject与输入文件的jsonobject进行比较

@Test
public void testcompareInputAndOutputDataJSONSignal() throws Exception {

    org.json.JSONObject jsonObject = toJsonObject();
    String input = jsonObject.toString();
    String output = JSONDataStreamOutput();
    assertEquals(mapper.readTree(input), mapper.readTree(output));
}
下面是我的toJSONObject和JSONDataStream方法

public static JSONObject toJsonObject() throws IOException, ParseException {
        JSONParser jsonParser = new JSONParser();
        FileReader fileReader = new FileReader(getFileFromResources("input.json"));
        JSONObject obj = (JSONObject) jsonParser.parse(fileReader);
        return obj;
    }

public String SignalDataStreamOutput() throws Exception {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        DataStream<JSONObject> validSignal = env.fromElements(toJsonObject())
                .process(new JsonFilter());
        String outputFolder = "output";
        validSignal.writeAsText(outputFolder).setParallelism(1);
        env.execute();
        String content = new String(Files.readAllBytes(Paths.get("output.txt")));
        return content;
}
publicstaticjsonobjecttojsonobject()抛出IOException,ParseException{
JSONParser JSONParser=新的JSONParser();
FileReader FileReader=newFileReader(getFileFromResources(“input.json”);
JSONObject obj=(JSONObject)jsonParser.parse(fileReader);
返回obj;
}
公共字符串SignalDataStreamOutput()引发异常{
最终StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
DataStream validSignal=env.fromElements(toJsonObject())
.process(新的JsonFilter());
字符串outputFolder=“output”;
validSignal.WriteEasText(outputFolder).setParallelism(1);
execute();
字符串内容=新字符串(Files.readAllBytes(path.get(“output.txt”));
返回内容;
}
我正在做的是使用toJSONObject方法将jsonfile转换为jsonobject,并使用SignalDataStreamOutput方法发送到数据流,该方法将把它内部发送到JsonFilter类中的一个进程函数,并根据一组规则验证它,如果它有效,它将返回一个jsonobject,并且在尝试访问jsonobject直接从流中获得的值与org.apache类似。flink@994jdkeiri所以我尝试将输出写入一个文件,并尝试将其读回一个字符串,并在测试方法中进行比较,但这是一个变通过程,我找到了使用Mockito框架的链接,我将其更改为使用json对象,如下所示

final Collector<JSONObject> collectorMock = (Collector<JSONObject>)Mockito.mock(JsonFilter.class);
final Context contextMock = Mockito.mock(Context.class);

@Test
    public void testcompareInputAndOutputDataForValidSignal() throws Exception {

        org.json.JSONObject jsonObject = convertToJsonObject();
        Mockito.verify(collectorMock).collect(jsonObject);
    }
final收集器collectorMock=(收集器)Mockito.mock(JsonFilter.class);
final Context contextMock=Mockito.mock(Context.class);
@试验
public void TestCompareInputOutDataForValidSignal()引发异常{
org.json.JSONObject JSONObject=convertToJsonObject();
Mockito.verify(collectorMock).collect(jsonObject);
}
但是上面的方法也不起作用,您能建议我使用简化的方法来测试json对象吗