Skip to content

Commit aba8fb8

Browse files
committed
Java:引入 UnitAuto-机器学习零代码单元测试 库
1 parent 21f0e59 commit aba8fb8

File tree

9 files changed

+124
-26
lines changed

9 files changed

+124
-26
lines changed

APIJSON-Java-Server/APIJSONBoot/.classpath

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,9 @@
2727
<attribute name="maven.pomderived" value="true"/>
2828
</attributes>
2929
</classpathentry>
30+
<classpathentry kind="lib" path="libs/apijson-orm-4.2.3.jar"/>
31+
<classpathentry kind="lib" path="libs/unitauto-2.5.0.jar"/>
32+
<classpathentry kind="lib" path="libs/unitauto-jar-2.5.0.jar"/>
33+
<classpathentry kind="lib" path="libs/apijson-framework-4.3.0.jar"/>
3034
<classpathentry kind="output" path="target/classes"/>
3135
</classpath>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

APIJSON-Java-Server/APIJSONBoot/pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>apijson.boot</groupId>
77
<artifactId>apijson-boot</artifactId>
8-
<version>4.2.3</version>
8+
<version>4.3.0</version>
99
<packaging>jar</packaging>
1010

1111
<name>APIJSONBoot</name>
@@ -73,11 +73,11 @@
7373
<!-- 没找到合适且稳定的 Oracle 的 JDBC Maven 依赖,需要自行下载 jar 包 -->
7474

7575
<!-- 可使用 libs 目录的 apijson-framework.jar 和 apijson-orm.jar 本地 jar 包依赖来替代,两种方式二选一 -->
76-
<dependency>
76+
<!-- <dependency>
7777
<groupId>com.github.APIJSON</groupId>
7878
<artifactId>apijson-framework</artifactId>
79-
<version>4.2.3</version>
80-
</dependency>
79+
<version>4.3.0</version>
80+
</dependency> -->
8181

8282
</dependencies>
8383

APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/boot/DemoApplication.java

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@
1414

1515
package apijson.boot;
1616

17+
import java.lang.reflect.Modifier;
18+
import java.util.List;
1719
import java.util.Map;
1820
import java.util.regex.Pattern;
1921

22+
import javax.naming.Context;
23+
2024
import org.springframework.beans.BeansException;
2125
import org.springframework.boot.SpringApplication;
2226
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -30,6 +34,10 @@
3034
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
3135
import org.springframework.web.filter.CorsFilter;
3236

37+
import com.alibaba.fastjson.JSON;
38+
import com.alibaba.fastjson.JSONObject;
39+
import com.alibaba.fastjson.serializer.PropertyFilter;
40+
3341
import apijson.Log;
3442
import apijson.StringUtil;
3543
import apijson.framework.APIJSONApplication;
@@ -40,6 +48,12 @@
4048
import apijson.orm.SQLExecutor;
4149
import apijson.orm.Structure;
4250
import apijson.orm.Verifier;
51+
import unitauto.MethodUtil;
52+
import unitauto.MethodUtil.Argument;
53+
import unitauto.MethodUtil.InstanceGetter;
54+
import unitauto.MethodUtil.JSONCallback;
55+
import unitauto.NotNull;
56+
import unitauto.jar.UnitAutoApp;
4357

4458

4559
/**SpringBootApplication
@@ -49,13 +63,18 @@
4963
@Configuration
5064
@SpringBootApplication
5165
public class DemoApplication implements ApplicationContextAware {
66+
private static final String TAG = "DemoApplication";
5267

5368
static {
69+
70+
// APIJSON 配置 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
71+
5472
Map<String, Pattern> COMPILE_MAP = Structure.COMPILE_MAP;
5573
COMPILE_MAP.put("PHONE", StringUtil.PATTERN_PHONE);
5674
COMPILE_MAP.put("EMAIL", StringUtil.PATTERN_EMAIL);
5775
COMPILE_MAP.put("ID_CARD", StringUtil.PATTERN_ID_CARD);
5876

77+
// 使用本项目的自定义处理类
5978
APIJSONApplication.DEFAULT_APIJSON_CREATOR = new APIJSONCreator() {
6079

6180
@Override
@@ -82,6 +101,96 @@ public SQLExecutor createSQLExecutor() {
82101
}
83102

84103
};
104+
105+
// APIJSON 配置 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
106+
107+
108+
109+
// UnitAuto 单元测试配置 https://github.com/TommyLemon/UnitAuto <<<<<<<<<<<<<<<<<<<<<<<<<<<
110+
111+
UnitAutoApp.init();
112+
113+
// 适配 Spring 注入的类及 Context 等环境相关的类
114+
final InstanceGetter ig = MethodUtil.INSTANCE_GETTER;
115+
MethodUtil.INSTANCE_GETTER = new InstanceGetter() {
116+
117+
@Override
118+
public Object getInstance(@NotNull Class<?> clazz, List<Argument> classArgs, Boolean reuse) throws Exception {
119+
if (APPLICATION_CONTEXT != null && ApplicationContext.class.isAssignableFrom(clazz) && clazz.isAssignableFrom(APPLICATION_CONTEXT.getClass())) {
120+
return APPLICATION_CONTEXT;
121+
}
122+
123+
if (reuse != null && reuse && (classArgs == null || classArgs.isEmpty())) {
124+
return APPLICATION_CONTEXT.getBean(clazz);
125+
}
126+
127+
return ig.getInstance(clazz, classArgs, reuse);
128+
}
129+
};
130+
131+
// 排除转换 JSON 异常的类,一般是 Context 等环境相关的类
132+
final JSONCallback jc = MethodUtil.JSON_CALLBACK;
133+
MethodUtil.JSON_CALLBACK = new JSONCallback() {
134+
135+
@Override
136+
public JSONObject newSuccessResult() {
137+
return jc.newSuccessResult();
138+
}
139+
140+
@Override
141+
public JSONObject newErrorResult(Throwable e) {
142+
return jc.newErrorResult(e);
143+
}
144+
145+
@Override
146+
public JSONObject parseJSON(String type, Object value) {
147+
if (value == null || unitauto.JSON.isBooleanOrNumberOrString(value) || value instanceof JSON || value instanceof Enum) {
148+
return jc.parseJSON(type, value);
149+
}
150+
151+
if (value instanceof ApplicationContext
152+
|| value instanceof Context
153+
|| value instanceof javax.validation.MessageInterpolator.Context
154+
|| value instanceof org.omg.CORBA.Context
155+
|| value instanceof org.apache.catalina.Context
156+
|| value instanceof ch.qos.logback.core.Context
157+
) {
158+
value = value.toString();
159+
}
160+
else {
161+
try {
162+
value = JSON.parse(JSON.toJSONString(value, new PropertyFilter() {
163+
@Override
164+
public boolean apply(Object object, String name, Object value) {
165+
if (value == null) {
166+
return true;
167+
}
168+
169+
if (value instanceof ApplicationContext
170+
|| value instanceof Context
171+
|| value instanceof javax.validation.MessageInterpolator.Context
172+
|| value instanceof org.omg.CORBA.Context
173+
|| value instanceof org.apache.catalina.Context
174+
|| value instanceof ch.qos.logback.core.Context
175+
) {
176+
return false;
177+
}
178+
179+
return Modifier.isPublic(value.getClass().getModifiers());
180+
}
181+
}));
182+
} catch (Exception e) {
183+
Log.e(TAG, "toJSONString catch \n" + e.getMessage());
184+
}
185+
}
186+
187+
return jc.parseJSON(type, value);
188+
}
189+
190+
};
191+
192+
// UnitAuto 单元测试配置 https://github.com/TommyLemon/UnitAuto >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
193+
85194
}
86195

87196

APIJSON-Java-Server/APIJSONBoot/src/main/java/apijson/boot/DemoController.java

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
import apijson.boot.model.Verify;
7777
import apijson.framework.APIJSONController;
7878
import apijson.framework.BaseModel;
79-
import apijson.framework.MethodUtil;
8079
import apijson.framework.StructureUtil;
8180
import apijson.orm.JSONRequest;
8281
import apijson.orm.exception.ConditionErrorException;
@@ -1544,30 +1543,16 @@ public String rapRepositoryDetail(@RequestParam("id") String id) {
15441543

15451544

15461545

1547-
@PostMapping("method/invoke")
1548-
public JSONObject invokeMethod(@RequestBody String request) {
1549-
try {
1550-
JSONObject req = JSON.parseObject(request);
1551-
if (req != null) {
1552-
String pkgName = req.getString("package");
1553-
String clsName = req.getString("class");
1554-
return MethodUtil.invokeMethod(
1555-
req,
1556-
DemoApplication.getApplicationContext().getBean(
1557-
Class.forName(pkgName.replaceAll("/", ".") + "." + clsName)
1558-
)
1559-
);
1560-
}
1561-
} catch (Exception e) {
1562-
Log.e(TAG, "listMethod try { JSONObject req = JSON.parseObject(request); ... } catch (Exception e) { \n" + e.getMessage());
1563-
}
1564-
1565-
return super.invokeMethod(request);
1566-
}
1567-
15681546
@PostMapping("method/list")
15691547
public JSONObject listMethod(@RequestBody String request) {
15701548
return super.listMethod(request);
15711549
}
1550+
1551+
@PostMapping("method/invoke")
1552+
public void invokeMethod(@RequestBody String request, HttpServletRequest servletRequest) {
1553+
super.invokeMethod(request, servletRequest);
1554+
}
1555+
1556+
15721557

15731558
}

0 commit comments

Comments
 (0)