我是测试新手,我正在尝试在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对象吗
暂无答案!
目前还没有任何答案,快来回答吧!