https://github.com/zcyc/go-test-demo
这个项目展示了 Go 单元测试的多种方式,包括 Testing、Testify、Ginkgo、GoMock 和 Mockery 的使用案例。
https://github.com/zcyc/go-test-demo
Last synced: 3 months ago
JSON representation
这个项目展示了 Go 单元测试的多种方式,包括 Testing、Testify、Ginkgo、GoMock 和 Mockery 的使用案例。
- Host: GitHub
- URL: https://github.com/zcyc/go-test-demo
- Owner: zcyc
- Created: 2024-07-09T08:12:25.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-13T15:46:29.000Z (3 months ago)
- Last Synced: 2025-04-14T10:13:03.545Z (3 months ago)
- Language: Go
- Homepage:
- Size: 35.2 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Go单元测试演示
这个项目展示了 Go 单元测试的多种方式,包括 Testing、Testify、Ginkgo、GoMock 和 Mockery 的使用案例。
## 项目结构
```
├── pkg # 项目源码包
│ └── user # 用户模块
│ ├── dao # 数据访问层(使用内存存储)
│ ├── mocks # 生成的 mock 文件
│ ├── service # 业务逻辑层
│ └── tests # 测试文件
├── go.mod # Go 模块文件
├── go.sum # Go 依赖版本记录
└── README.md # 项目说明文档
```## 技术栈
- **Testing**: Go 标准测试库
- **Testify**: 更丰富的断言和 mock 功能
- **Ginkgo**: BDD 风格测试框架
- **GoMock**: 自动生成 mock 对象
- **Mockery**: 自动生成 Testify mock 对象## 安装依赖工具
```bash
go install github.com/onsi/ginkgo/v2/ginkgo
go install go.uber.org/mock/mockgen@latest
go install github.com/vektra/mockery/v2@latest
```## Mock 文件生成
### 使用命令生成
GoMock:
```bash
mockgen -source=pkg/user/dao/struct.go -destination=pkg/user/mocks/gomock_struct.go -package=mocks
```Mockery:
```bash
mockery --name UserDao --output pkg/user/mocks --filename testify_struct.go --outpkg mocks
```### 使用注释自动生成
在接口定义文件中添加注释:
```go
//go:generate mockgen -source=struct.go -destination=../mocks/gomock_struct.go -package=mocks
//go:generate mockery --name UserDao --filename testify_struct.go --outpkg mocks --output ../mocks
```然后执行:
```bash
go generate ./...
```## 测试示例
本项目包含三种测试方式的示例:
1. **标准 testing 包**: 简单直接的测试方式
2. **Testify**: 使用 assert 提供更丰富的断言功能
3. **Ginkgo**: BDD 风格的测试,提供 Describe/It 语法和性能测量功能## 运行测试
```bash
# 运行所有测试
go test ./...# 显示详细输出
go test -v ./...# 显示测试覆盖率
go test -v -cover ./...# 生成覆盖率报告
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html
```## Ginkgo 使用指南
### 创建测试套件
```bash
cd pkg/user/tests
ginkgo bootstrap
```### 生成测试文件
```bash
ginkgo generate user
```## 相关文档
- [Testing Package](https://golang.org/pkg/testing/)
- [Testify](https://github.com/stretchr/testify)
- [Ginkgo](https://onsi.github.io/ginkgo/)
- [Gomega](https://onsi.github.io/gomega/)
- [GoMock](https://github.com/uber-go/mock)
- [Mockery](https://vektra.github.io/mockery/)