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

oknwwptz  于 2021-06-26  发布在  Flink
关注(0)|答案(0)|浏览(296)

我是测试新手,我正在尝试在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;
}

我正在做的是使用tojsonobject方法将jsonfile转换为jsonobject,并使用signaldatastreamoutput方法发送到数据流,该方法将把它内部发送到jsonfilter类中的一个进程函数,并根据一组规则验证它,如果它有效,它将返回一个jsonobject,并在尝试访问jsonobject时返回直接从流中我得到了org.apache这样的价值。flink@994jdkeiri 所以我尝试将输出写入一个文件,并尝试将其读回一个字符串,然后在test method中进行比较,但这是一个变通的过程,我在这里找到了使用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);
    }

但是上面的方法也不起作用,你能建议我用简化的方法来测试json对象吗

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题