Skip to content

Commit 1c7dcd4

Browse files
author
chenfeng
committed
新增测试自定义比较器内容
1 parent d18faa4 commit 1c7dcd4

File tree

7 files changed

+382
-20
lines changed

7 files changed

+382
-20
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package me.codeleep.jsondiff.test;
2+
3+
import com.alibaba.fastjson2.JSON;
4+
import me.codeleep.jsondiff.DefaultJsonDifference;
5+
import me.codeleep.jsondiff.common.model.JsonCompareResult;
6+
import me.codeleep.jsondiff.common.model.TravelPath;
7+
import me.codeleep.jsondiff.common.model.neat.JsonDiff;
8+
import me.codeleep.jsondiff.common.model.neat.JsonDiffArray;
9+
import me.codeleep.jsondiff.common.model.neat.JsonDiffObject;
10+
import me.codeleep.jsondiff.common.model.neat.JsonNeat;
11+
import me.codeleep.jsondiff.core.config.JsonComparedOption;
12+
import me.codeleep.jsondiff.core.handle.AbstractHandleFactory;
13+
import me.codeleep.jsondiff.core.handle.array.ComplexArrayJsonNeat;
14+
import me.codeleep.jsondiff.core.handle.object.ComplexObjectJsonNeat;
15+
import me.codeleep.jsondiff.core.handle.other.ComplexOtherJsonNeat;
16+
import me.codeleep.jsondiff.core.handle.primitive.ComplexPrimitiveJsonNeat;
17+
import me.codeleep.jsondiff.core.utils.ClassUtil;
18+
import me.codeleep.jsondiff.test.dataFactory.HandleFactoryDataFactory;
19+
import me.codeleep.jsondiff.test.model.MetaData;
20+
import me.codeleep.jsondiff.test.utils.FormatContent;
21+
import org.testng.Assert;
22+
import org.testng.annotations.Test;
23+
24+
/**
25+
* @author: chenfeng
26+
* @createTime: 2024/4/20
27+
* @description: 实现对于自定义比较器的使用测试
28+
*/
29+
public class HandleFactoryTest {
30+
private static final DefaultJsonDifference defaultJsonDifference = new DefaultJsonDifference();
31+
@Test(dataProvider = "right", dataProviderClass = HandleFactoryDataFactory.class)
32+
public void RightTest(MetaData metaData) {
33+
JsonComparedOption jsonComparedOption = new JsonComparedOption();
34+
jsonComparedOption.setJsonNeatFactory(new AbstractHandleFactory() {
35+
class ComplexObjectJsonNeatTest extends ComplexObjectJsonNeat {
36+
private ComplexObjectJsonNeatTest(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
37+
super(travelPath, DisposeExpect(expect), actual);
38+
}
39+
@Override
40+
protected JsonCompareResult diff1() {
41+
return super.diff1();
42+
}
43+
}
44+
class ComplexArrayJsonNeatTest extends ComplexArrayJsonNeat {
45+
private ComplexArrayJsonNeatTest(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
46+
super(travelPath, DisposeExpect(expect), actual);
47+
}
48+
@Override
49+
protected JsonCompareResult diff1() {
50+
return super.diff1();
51+
}
52+
}
53+
private JsonDiff DisposeExpect(JsonDiff expect) {
54+
return expect;
55+
}
56+
57+
@Override
58+
public JsonNeat<? extends JsonDiff> generate(JsonDiff expect, JsonDiff actual, TravelPath travelPath) {
59+
if (!ClassUtil.isSameClass(expect, actual)) {
60+
return null;
61+
}
62+
if (expect instanceof JsonDiffObject && actual instanceof JsonDiffObject) {
63+
return new ComplexObjectJsonNeatTest(travelPath, expect, actual);
64+
}
65+
if (expect instanceof JsonDiffArray && actual instanceof JsonDiffArray) {
66+
return new ComplexArrayJsonNeatTest(travelPath, expect, actual);
67+
}
68+
if (expect.isLeaf() && actual.isLeaf()) {
69+
return new ComplexPrimitiveJsonNeat(travelPath, expect, actual);
70+
}
71+
return new ComplexOtherJsonNeat(travelPath, expect, actual);
72+
}
73+
});
74+
JsonCompareResult jsonCompareResult = defaultJsonDifference.option(jsonComparedOption)
75+
.detectDiff(JSON.toJSONString(metaData.getExpect()), JSON.toJSONString(metaData.getActual()));
76+
if (metaData.getRet() != null) {
77+
Assert.assertEquals(FormatContent.formatComparisonContent(jsonCompareResult), FormatContent.formatComparisonContent(metaData.getRet().toString()));
78+
} else {
79+
Assert.assertEquals(FormatContent.formatComparisonContent(jsonCompareResult), FormatContent.formatComparisonContent("{\"match\":true}"));
80+
}
81+
}
82+
}

json-diff-test/src/main/java/me/codeleep/jsondiff/test/dataFactory/FactoryUtil.java

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,40 +18,44 @@
1818
public class FactoryUtil {
1919
/**
2020
* 加载数据
21-
* @param path 加载路径
21+
* @param path 加载路径
2222
* @param loadDataName 加载用例类型名称数组
23-
* @param maxMap 存储每种类型用例的个数
24-
* @param arrayData 存储用例
23+
* @param maxMap 存储每种类型用例的个数
24+
* @param arrayData 存储用例
2525
*/
26-
public static void load(String path,String[] loadDataName,Map<String, Integer> maxMap,Map<String, ArrayList<MetaData>> arrayData) {
26+
public static void load(String path, String[] loadDataName, Map<String, Integer> maxMap, Map<String, ArrayList<MetaData>> arrayData) {
2727
String expectContent = ResourceUtils.loadResourceLine(path);
2828
JSONObject jsonObject = (JSONObject) JSON.parse(expectContent);
2929
for (String name : loadDataName) {
30-
arrayData.put(name, JsonArrayToMetadataList(jsonObject.getJSONArray(name), name,maxMap));
30+
if (jsonObject.getJSONArray(name) != null) {
31+
arrayData.put(name, JsonArrayToMetadataList(jsonObject.getJSONArray(name), name, maxMap));
32+
} else {
33+
arrayData.put(name, null);
34+
}
3135
}
3236
}
3337

3438
/**
3539
* 将JsonArray对象转换为List<Metadata> 并将每种类型的个数进行统计赋值
3640
* @param jsonArray 需要转换的对象
3741
* @param type 他是什么类型
38-
* @param maxMap 存储每种类型用例的个数
42+
* @param maxMap 存储每种类型用例的个数
3943
* @return ArrayList<MetaData>
4044
*/
41-
private static ArrayList<MetaData> JsonArrayToMetadataList(JSONArray jsonArray, String type,Map<String, Integer> maxMap) {
45+
private static ArrayList<MetaData> JsonArrayToMetadataList(JSONArray jsonArray, String type, Map<String, Integer> maxMap) {
4246
ArrayList<MetaData> list = new ArrayList<>();
4347
int count = 0;
4448
for (Object i : jsonArray) {
4549
JSONObject jsonObject = (JSONObject) i;
46-
MetaData metaData = new MetaData(jsonObject.getString("caseName"),jsonObject.get("expect"),
50+
MetaData metaData = new MetaData(jsonObject.getString("caseName"), jsonObject.get("expect"),
4751
jsonObject.get("actual"),
4852
jsonObject.get("ret"),
4953
getOptionObject((JSONObject) jsonObject.get("option")));
5054
list.add(metaData);
5155
count++;
5256
}
5357

54-
maxMap.put(type,count);
58+
maxMap.put(type, count);
5559
return list;
5660
}
5761

@@ -66,15 +70,15 @@ private static JsonComparedOption getOptionObject(JSONObject jsonObject) {
6670
return null;
6771
JsonComparedOption jsonComparedOption = new JsonComparedOption();
6872
boolean ignoreOrder = false;
69-
try{
73+
try {
7074
ignoreOrder = jsonObject.getBoolean("ignoreOrder") != null && jsonObject.getBoolean("ignoreOrder");
71-
}catch (ExceptionInInitializerError e){
75+
} catch (ExceptionInInitializerError e) {
7276
e.printStackTrace();
7377
}
7478
jsonComparedOption.setIgnoreOrder(ignoreOrder);
7579
String mapping = jsonObject.getString("mapping");
76-
if(mapping != null && !mapping.isEmpty()){
77-
jsonComparedOption.setMapping((HashMap<String,String>)JSONObject.parseObject(mapping,Map.class) );
80+
if (mapping != null && !mapping.isEmpty()) {
81+
jsonComparedOption.setMapping((HashMap<String, String>) JSONObject.parseObject(mapping, Map.class));
7882
}
7983
jsonComparedOption.setIgnorePath(ArrStringToSet(jsonObject.getString("ignorePath")));
8084
jsonComparedOption.setIgnoreKey(ArrStringToSet(jsonObject.getString("ignoreKey")));
@@ -86,12 +90,12 @@ private static JsonComparedOption getOptionObject(JSONObject jsonObject) {
8690
* @param stringList json array字符串
8791
* @return HashSet 转化后的set对象
8892
*/
89-
private static HashSet<String> ArrStringToSet(String stringList){
90-
if (stringList == null || stringList.isEmpty()){
91-
return null;
92-
}
93-
List<String> arrayList = JSON.parseArray(stringList,String.class);
94-
return new HashSet<>(arrayList);
95-
}
93+
private static HashSet<String> ArrStringToSet(String stringList) {
94+
if (stringList == null || stringList.isEmpty()) {
95+
return null;
96+
}
97+
List<String> arrayList = JSON.parseArray(stringList, String.class);
98+
return new HashSet<>(arrayList);
99+
}
96100

97101
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package me.codeleep.jsondiff.test.dataFactory;
2+
3+
import me.codeleep.jsondiff.test.model.MetaData;
4+
import org.testng.annotations.DataProvider;
5+
import java.util.ArrayList;
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
import static me.codeleep.jsondiff.test.model.Constant.*;
9+
10+
/**
11+
* @author: chenfeng
12+
* @createTime: 2024/4/21
13+
* @description: 加载自定义比较器的数据类
14+
*/
15+
public class HandleFactoryDataFactory {
16+
private static final Map<String, Integer> maxMap = new HashMap<>();
17+
public static Map<String, ArrayList<MetaData>> arrayData = new HashMap<>();
18+
19+
static {
20+
FactoryUtil.load(HANDLE_PATH,LOAD_DATE_NAME,maxMap,arrayData);
21+
}
22+
@DataProvider(name = "right")
23+
public Object[] rightData() {
24+
return arrayData.get("right").toArray(new MetaData[maxMap.get("right")]);
25+
}
26+
27+
@DataProvider(name = "err")
28+
public Object[] errData() {
29+
return arrayData.get("err").toArray(new MetaData[maxMap.get("err")]);
30+
}
31+
}

json-diff-test/src/main/java/me/codeleep/jsondiff/test/model/Constant.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class Constant {
1111
*/
1212
public static final String ARRAY_PATH = "array/MultArrays.json";
1313
public static final String OBJECT_PATH = "object/MultObjects.json";
14+
public static final String HANDLE_PATH = "handle/MultHandle.json";
1415
/**
1516
* 存储在数组中的测试数据类型
1617
*/

0 commit comments

Comments
 (0)