Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Powered by `Moshow郑锴(大狼狗)` 🌟 Might the holy code be with you !

> 🙌 Special thanks to BeJSON 前站长 `三叔` 的慧眼与支持,让项目得以脱颖而出,感恩!


<img src="./newui_version_2.png" width="600px">

## 功能特性

Expand Down Expand Up @@ -86,9 +86,18 @@ cd SpringBootCodeGenerator
mvn clean compile
# 运行项目
mvn spring-boot:run
```

项目启动后访问 http://localhost:1234/generator
# 访问项目
http://localhost:1234/generator

# 打包项目(不验证单元测试)
mvn clean package -DskipTests

# 运行测试
mvn test
# 查看JaCoCo测试覆盖率
cd /target/site/jacoco
```

### 添加新模板

Expand Down Expand Up @@ -224,8 +233,7 @@ ResultVo.error(message);
## Stargazers over time
[![Stargazers over time](https://starchart.cc/moshowgame/SpringBootCodeGenerator.svg?variant=adaptive)](https://starchart.cc/moshowgame/SpringBootCodeGenerator)

2025 NewUI V2版本<br>
<img src="./newui_version_2.png">

配置模板<br>
<img src="./codegenerator2.png">
网站流量分析-2024<br>
Expand All @@ -236,6 +244,7 @@ ResultVo.error(message);
# Update Logs
| 更新日期 | 更新内容 |
|:-----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 2025.12.08 | 引入单元测试和JaCoCo测试覆盖率,优化代码覆盖率 [UNIT_TEST_DOCUMENT.md](UNIT_TEST_DOCUMENT.md) |
| 2025.12.07 | 后端重构优化![REFACTORING_DOCUMENT.md](REFACTORING_DOCUMENT.md) ;目录结构调整! |
| 2025.09.14 | 优化JSqlParser Engine(DDL Create SQL和Select SQL),适配更高级复杂的SQL |
| 2025.09.13 | JSqlParser Engine全新升级,目前Select SQL模式相对稳定! <br>更新SpringBoot等类库版本,修复漏洞<br>修复CDN问题,切换为staticfile.org |
Expand Down
192 changes: 192 additions & 0 deletions UNIT_TEST_DOCUMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
# 单元测试重构总结

## 已完成的单元测试

基于最新的项目代码,我已经为以下Service和Controller类生成了完整的单元测试:

### 1. Service层测试

#### CodeGenServiceTest
- **位置**: `src/test/java/com/softdev/system/generator/service/CodeGenServiceTest.java`
- **测试内容**:
- ✅ 测试生成代码成功场景
- ✅ 测试表结构信息为空的错误处理
- ✅ 测试表结构信息为null的错误处理
- ✅ 测试生成代码异常处理
- ✅ 测试JSON模式解析
- ✅ 测试INSERT SQL模式解析
- ✅ 测试根据参数获取结果
- ✅ 测试模板为空的情况

#### TemplateServiceTest
- **位置**: `src/test/java/com/softdev/system/generator/service/TemplateServiceTest.java`
- **测试内容**:
- ✅ 测试获取所有模板配置成功
- ✅ 测试模板配置缓存机制
- ✅ 测试模板配置JSON解析
- ✅ 测试无效JSON异常处理

#### SqlParserServiceTest
- **位置**: `src/test/java/com/softdev/system/generator/service/parser/SqlParserServiceTest.java`
- **测试内容**:
- ✅ 测试解析Select SQL
- ✅ 测试解析Create SQL
- ✅ 测试处理表结构到类信息
- ✅ 测试正则表达式解析表结构
- ✅ 测试解析Insert SQL
- ✅ 测试空SQL字符串异常处理
- ✅ 测试null SQL字符串异常处理
- ✅ 测试无效SQL语法异常处理
- ✅ 测试复杂Select SQL解析
- ✅ 测试带别名的Select SQL
- ✅ 测试Insert SQL正则表达式解析

#### JsonParserServiceTest
- **位置**: `src/test/java/com/softdev/system/generator/service/parser/JsonParserServiceTest.java`
- **测试内容**:
- ✅ 测试解析简单JSON
- ✅ 测试解析复杂嵌套JSON
- ✅ 测试解析空JSON
- ✅ 测试null JSON字符串处理
- ✅ 测试空字符串JSON处理
- ✅ 测试无效JSON格式处理
- ✅ 测试JSON数组解析
- ✅ 测试不同数据类型字段解析

### 2. Controller层测试

#### CodeGenControllerTest
- **位置**: `src/test/java/com/softdev/system/generator/controller/CodeGenControllerTest.java`
- **测试内容**:
- ✅ 测试生成代码接口成功
- ✅ 测试生成代码接口返回错误
- ✅ 测试参数为空的情况
- ✅ 测试无效JSON请求
- ✅ 测试缺少Content-Type
- ✅ 测试服务层异常处理
- ✅ 测试空tableSql验证
- ✅ 测试null tableSql验证
- ✅ 测试null options验证
- ✅ 测试复杂参数处理

#### PageControllerTest
- **位置**: `src/test/java/com/softdev/system/generator/controller/PageControllerTest.java`
- **测试内容**:
- ✅ 测试默认页面路由
- ✅ 测试首页路由
- ✅ 测试ModelAndView对象
- ✅ 测试ValueUtil注入

#### TemplateControllerTest
- **位置**: `src/test/java/com/softdev/system/generator/controller/TemplateControllerTest.java`
- **测试内容**:
- ✅ 测试获取所有模板成功
- ✅ 测试返回空数组
- ✅ 测试服务异常处理
- ✅ 测试IO异常处理
- ✅ 测试直接调用方法
- ✅ 测试错误请求路径
- ✅ 测试错误的HTTP方法

### 3. 工具类测试

#### ResultVoTest
- **位置**: `src/test/java/com/softdev/system/generator/vo/ResultVoTest.java`
- **测试内容**:
- ✅ 测试默认构造函数
- ✅ 测试ok静态方法
- ✅ 测试带数据的ok方法
- ✅ 测试error方法
- ✅ 测试带错误码的error方法
- ✅ 测试put方法
- ✅ 测试链式调用
- ✅ 测试size、containsKey等Map方法
- ✅ 测试remove和clear方法

#### MapUtilTest
- **位置**: `src/test/java/com/softdev/system/generator/util/MapUtilTest.java`
- **测试内容**:
- ✅ 测试getString方法
- ✅ 测试getInteger方法
- ✅ 测试getBoolean方法
- ✅ 测试异常处理
- ✅ 测试空Map和null Map

#### StringUtilsPlusTest
- **位置**: `src/test/java/com/softdev/system/generator/util/StringUtilsPlusTest.java`
- **测试内容**:
- ✅ 测试字符串工具类各种方法
- ✅ 已修复为适配实际存在的方法

## 测试框架配置

### JUnit 5 + Mockito
项目已升级到:
- **JUnit 5 (Jupiter)**: 现代化测试框架
- **Mockito**: 强大的Mock框架
- **Spring Boot Test**: Spring集成测试支持

### 测试特性
- ✅ 使用Mockito进行依赖注入Mock
- ✅ 静态方法Mock(MockedStatic)
- ✅ Spring MVC测试(MockMvc)
- ✅ 完整的异常场景覆盖
- ✅ 边界条件测试
- ✅ 中文测试名称(@DisplayName)

## 代码质量

### 测试覆盖率
- Service层:高覆盖率,包含所有公共方法
- Controller层:完整HTTP接口测试
- 工具类:核心方法全覆盖

### 测试质量
- ✅ 遵循AAA模式(Arrange-Act-Assert)
- ✅ 清晰的测试命名
- ✅ 合理的测试数据准备
- ✅ 完善的断言验证

## 运行测试

### 单独运行测试类
```bash
mvn test -Dtest=CodeGenServiceTest
mvn test -Dtest=CodeGenControllerTest
mvn test -Dtest=TemplateServiceTest
```

### 运行所有新增测试
```bash
mvn test -Dtest=CodeGenServiceTest,TemplateServiceTest,CodeGenControllerTest,PageControllerTest,TemplateControllerTest,SqlParserServiceTest,JsonParserServiceTest,StringUtilsPlusTest,MapUtilTest,ResultVoTest
```

## 项目结构

```
src/test/java/com/softdev/system/generator/
├── controller/
│ ├── CodeGenControllerTest.java
│ ├── PageControllerTest.java
│ └── TemplateControllerTest.java
├── service/
│ ├── CodeGenServiceTest.java
│ └── TemplateServiceTest.java
├── service/parser/
│ ├── SqlParserServiceTest.java
│ └── JsonParserServiceTest.java
├── util/
│ ├── MapUtilTest.java
│ └── StringUtilsPlusTest.java
└── vo/
└── ResultVoTest.java
```

## 注意事项

1. **依赖兼容性**: 所有测试已适配项目的实际依赖
2. **方法签名**: 测试方法与实际实现类的方法签名完全匹配
3. **异常处理**: 包含了完整的异常场景测试
4. **Mock策略**: 合理使用Mock避免外部依赖影响

这些单元测试为项目的核心业务逻辑提供了可靠的验证,确保代码质量和功能正确性。
Binary file modified newui_version_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
127 changes: 125 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,37 @@
<artifactId>jsqlparser</artifactId>
<version>5.3</version>
</dependency>
<!-- JUnit 5 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>

<!-- Mockito for JUnit 5 -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>

<!-- Spring Boot Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
Expand Down Expand Up @@ -163,6 +189,103 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

<!-- Maven Surefire Plugin for JUnit 5 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.5.2</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<includes>
<include>**/*Test.java</include>
<include>**/*Tests.java</include>
</includes>
</configuration>
</plugin>

<!-- JaCoCo Maven Plugin for Code Coverage -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version>
<executions>
<!-- 准备JaCoCo代理,用于收集覆盖率数据 -->
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>

<!-- 生成覆盖率报告 -->
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>

<!-- 检查覆盖率阈值 -->
<execution>
<id>check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<!-- 指令覆盖率最低要求 -->
<limit>
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
<!-- 分支覆盖率最低要求 -->
<limit>
<counter>BRANCH</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
<!-- 类覆盖率最低要求 -->
<limit>
<counter>CLASS</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
<!-- 方法覆盖率最低要求 -->
<limit>
<counter>METHOD</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
<!-- 行覆盖率最低要求 -->
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
<configuration>
<!-- 排除不需要生成覆盖率报告的类 -->
<excludes>
<exclude>**/Application.class</exclude>
<exclude>**/config/**</exclude>
<exclude>**/dto/**</exclude>
<exclude>**/vo/**</exclude>
<exclude>**/entity/**</exclude>
<exclude>**/util/exception/**</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

Expand Down
Loading
Loading