Commit ae98d17473dbdb48dbd21fde613a158d1bc96236

Authored by puhui999
Committed by YunaiV
1 parent 6a4449e0

代码生成测试:系统不一样生成的文件也有差异,那就各自生成各自。新增根据操作系统动态获取测试文件资源路径

yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineAbstractTest.java
... ... @@ -31,6 +31,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
31 31 */
32 32 public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest {
33 33  
  34 + public String resourcesPath = ""; // 测试文件资源目录
  35 + public static final String OS_NAME = System.getProperty("os.name").toLowerCase().replace(" ", ""); // 操作系统名称
  36 +
34 37 @InjectMocks
35 38 protected CodegenEngine codegenEngine;
36 39  
... ... @@ -41,6 +44,10 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest {
41 44 @BeforeEach
42 45 public void setUp() {
43 46 codegenEngine.initGlobalBindingMap();
  47 + // 获取测试文件 resources 路径
  48 + String absolutePath = FileUtil.getAbsolutePath("application-unit-test.yaml");
  49 + // 系统不一样生成的文件也有差异,那就各自生成各自的
  50 + resourcesPath = absolutePath.split("/target")[0] + "/src/test/resources/codegen/" + OS_NAME;
44 51 }
45 52  
46 53 protected static CodegenTableDO getTable(String name) {
... ... @@ -73,14 +80,14 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest {
73 80  
74 81 @SuppressWarnings("rawtypes")
75 82 protected static void assertResult(Map<String, String> result, String path) {
76   - String assertContent = ResourceUtil.readUtf8Str(path + "/assert.json");
  83 + String assertContent = ResourceUtil.readUtf8Str("codegen/" + OS_NAME + path + "/assert.json");
77 84 List<HashMap> asserts = JsonUtils.parseArray(assertContent, HashMap.class);
78 85 assertEquals(asserts.size(), result.size());
79 86 // 校验每个文件
80 87 asserts.forEach(assertMap -> {
81 88 String contentPath = (String) assertMap.get("contentPath");
82 89 String filePath = (String) assertMap.get("filePath");
83   - String content = ResourceUtil.readUtf8Str(path + "/" + contentPath);
  90 + String content = ResourceUtil.readUtf8Str("codegen/" + OS_NAME + path + "/" + contentPath);
84 91 assertEquals(content, result.get(filePath), filePath + ":不匹配");
85 92 });
86 93 }
... ... @@ -91,7 +98,7 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest {
91 98 * 【调试使用】将生成的代码,写入到文件
92 99 *
93 100 * @param result 生成的代码
94   - * @param path 写入文件的路径
  101 + * @param path 写入文件的路径
95 102 */
96 103 protected void writeFile(Map<String, String> result, String path) {
97 104 // 生成压缩包
... ... @@ -106,7 +113,7 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest {
106 113 /**
107 114 * 【调试使用】将生成的结果,写入到文件
108 115 *
109   - * @param result 生成的代码
  116 + * @param result 生成的代码
110 117 * @param basePath 写入文件的路径(绝对路径)
111 118 */
112 119 protected void writeResult(Map<String, String> result, String basePath) {
... ... @@ -121,7 +128,7 @@ public abstract class CodegenEngineAbstractTest extends BaseMockitoUnitTest {
121 128 FileUtil.writeUtf8String(fileContent, basePath + "/" + contentPath);
122 129 });
123 130 // 写入 assert.json 文件
124   - FileUtil.writeUtf8String(JsonUtils.toJsonPrettyString(asserts), basePath +"/assert.json");
  131 + FileUtil.writeUtf8String(JsonUtils.toJsonPrettyString(asserts), basePath + "/assert.json");
125 132 }
126 133  
127 134 }
... ...
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue2Test.java
... ... @@ -11,7 +11,6 @@ import java.util.Arrays;
11 11 import java.util.List;
12 12 import java.util.Map;
13 13  
14   -// TODO @puhui999:单测需要 fix
15 14 /**
16 15 * {@link CodegenEngine} 的 Vue2 + Element UI 单元测试
17 16 *
... ... @@ -30,9 +29,10 @@ public class CodegenEngineVue2Test extends CodegenEngineAbstractTest {
30 29  
31 30 // 调用
32 31 Map<String, String> result = codegenEngine.execute(table, columns, null, null);
  32 + // 生成测试文件
  33 + //writeResult(result, resourcesPath + "/vue2_one");
33 34 // 断言
34   - assertResult(result, "codegen/vue2_one");
35   -// writeResult(result, "/root/ruoyi-vue-pro/yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/vue2_one");
  35 + assertResult(result, "/vue2_one");
36 36 }
37 37  
38 38 @Test
... ... @@ -45,25 +45,26 @@ public class CodegenEngineVue2Test extends CodegenEngineAbstractTest {
45 45  
46 46 // 调用
47 47 Map<String, String> result = codegenEngine.execute(table, columns, null, null);
  48 + // 生成测试文件
  49 + //writeResult(result, resourcesPath + "/vue2_tree");
48 50 // 断言
49   - assertResult(result, "codegen/vue2_tree");
50   -// writeResult(result, "/root/ruoyi-vue-pro/yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/vue2_tree");
  51 + assertResult(result, "/vue2_tree");
51 52 // writeFile(result, "/Users/yunai/test/demo66.zip");
52 53 }
53 54  
54 55 @Test
55 56 public void testExecute_vue2_master_normal() {
56   - testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_NORMAL, "codegen/vue2_master_normal");
  57 + testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_NORMAL, "/vue2_master_normal");
57 58 }
58 59  
59 60 @Test
60 61 public void testExecute_vue2_master_erp() {
61   - testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_ERP, "codegen/vue2_master_erp");
  62 + testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_ERP, "/vue2_master_erp");
62 63 }
63 64  
64 65 @Test
65 66 public void testExecute_vue2_master_inner() {
66   - testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_INNER, "codegen/vue2_master_inner");
  67 + testExecute_vue2_master(CodegenTemplateTypeEnum.MASTER_INNER, "/vue2_master_inner");
67 68 }
68 69  
69 70 private void testExecute_vue2_master(CodegenTemplateTypeEnum templateType,
... ... @@ -89,9 +90,10 @@ public class CodegenEngineVue2Test extends CodegenEngineAbstractTest {
89 90 // 调用
90 91 Map<String, String> result = codegenEngine.execute(table, columns,
91 92 Arrays.asList(contactTable, teacherTable), Arrays.asList(contactColumns, teacherColumns));
  93 + // 生成测试文件
  94 + //writeResult(result, resourcesPath + path);
92 95 // 断言
93 96 assertResult(result, path);
94   -// writeResult(result, "/root/ruoyi-vue-pro/yudao-module-infra/yudao-module-infra-biz/src/test/resources/" + path);
95 97 // writeFile(result, "/Users/yunai/test/demo11.zip");
96 98 }
97 99  
... ...
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineVue3Test.java
... ... @@ -27,9 +27,10 @@ public class CodegenEngineVue3Test extends CodegenEngineAbstractTest {
27 27  
28 28 // 调用
29 29 Map<String, String> result = codegenEngine.execute(table, columns, null, null);
  30 + // 生成测试文件
  31 + //writeResult(result, resourcesPath + "/vue3_one");
30 32 // 断言
31   - assertResult(result, "codegen/vue3_one");
32   -// writeResult(result, "/root/ruoyi-vue-pro/yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/vue3_one");
  33 + assertResult(result, "/vue3_one");
33 34 }
34 35  
35 36 @Test
... ... @@ -42,25 +43,26 @@ public class CodegenEngineVue3Test extends CodegenEngineAbstractTest {
42 43  
43 44 // 调用
44 45 Map<String, String> result = codegenEngine.execute(table, columns, null, null);
  46 + // 生成测试文件
  47 + //writeResult(result, resourcesPath + "/vue3_tree");
45 48 // 断言
46   - assertResult(result, "codegen/vue3_tree");
47   -// writeResult(result, "/root/ruoyi-vue-pro/yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/vue3_tree");
  49 + assertResult(result, "/vue3_tree");
48 50 // writeFile(result, "/Users/yunai/test/demo66.zip");
49 51 }
50 52  
51 53 @Test
52 54 public void testExecute_vue3_master_normal() {
53   - testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_NORMAL, "codegen/vue3_master_normal");
  55 + testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_NORMAL, "/vue3_master_normal");
54 56 }
55 57  
56 58 @Test
57 59 public void testExecute_vue3_master_erp() {
58   - testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_ERP, "codegen/vue3_master_erp");
  60 + testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_ERP, "/vue3_master_erp");
59 61 }
60 62  
61 63 @Test
62 64 public void testExecute_vue3_master_inner() {
63   - testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_INNER, "codegen/vue3_master_inner");
  65 + testExecute_vue3_master(CodegenTemplateTypeEnum.MASTER_INNER, "/vue3_master_inner");
64 66 }
65 67  
66 68 private void testExecute_vue3_master(CodegenTemplateTypeEnum templateType,
... ... @@ -86,10 +88,11 @@ public class CodegenEngineVue3Test extends CodegenEngineAbstractTest {
86 88 // 调用
87 89 Map<String, String> result = codegenEngine.execute(table, columns,
88 90 Arrays.asList(contactTable, teacherTable), Arrays.asList(contactColumns, teacherColumns));
  91 + // 生成测试文件
  92 + //writeResult(result, resourcesPath + path);
89 93 // 断言
90 94 assertResult(result, path);
91   -// writeResult(result, "/root/ruoyi-vue-pro/yudao-module-infra/yudao-module-infra-biz/src/test/resources/" + path);
92   -// writeFile(result, "/Users/yunai/test/demo11.zip");
  95 + // writeFile(result, "/Users/yunai/test/demo11.zip");
93 96 }
94 97  
95 98 }
... ...