mit einem Klick
go-test-standards
Golang 单元测试规范与最佳实践指南
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Menü
Golang 单元测试规范与最佳实践指南
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
代码审核辅助工具,支持本地 Git 库和 Gerrit Review。支持审核当前最新 commit、暂存的修改、未暂存的修改等,也支持 Golang、Qt/C++、Ansible 等多语言的 Gerrit Code Review。提供"必须修复/建议修复/可选改进"三级分级审核,生成 Markdown 报告。
Structured remote server troubleshooting workflow that follows investigation-only practices until user approval. Use when Claude needs to diagnose issues on remote SSH-accessible servers including k8s clusters, bare metal, and containerized services. Covers service/port access problems, configuration issues, service startup failures, and performance/resource issues. Emphasizes creating helper scripts on remote server, obtaining user approval before fixes, script-based repairs, and generating comprehensive analysis reports.
提供 GoFrame 框架的官方最佳实践指导,包括项目结构、分层架构、配置管理、数据校验、数据库操作、中间件开发等开发规范
Basierend auf der SOC-Berufsklassifikation
| name | go-test-standards |
| description | Golang 单元测试规范与最佳实践指南 |
| category | testing |
| tags | ["golang","go-test-standards","unit-test","ginkgo","gomega","testing"] |
| 阶段 | 说明 |
|---|---|
| Setup | 准备测试所需的数据和环境 |
| Exercise | 执行被测试的代码 |
| Verify | 验证执行结果是否符合预期 |
| Teardown | 清理测试环境和数据 |
Go 项目必须使用以下工具:
注意事项:
Ω 别名。suite_test.go。abc,则测试文件属于 abc_test 包。package db_test
import (
"fmt"
"reflect"
"testing"
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
dockertest "github.com/ory/dockertest/v3"
"github.com/ory/dockertest/v3/docker"
)
const (
dbName = "test"
dbPwd = "test"
)
func TestDB(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Db Test Suite", Label("repo", "store/db"))
}
var (
Db *gorm.DB
cleanupDocker func()
)
var _ = BeforeSuite(func() {
Db, cleanupDocker = setupGormWithDocker()
})
var _ = AfterSuite(func() {
cleanupDocker()
})
var _ = BeforeEach(func() {
Except(cleanDatabase(Db, dbName)).To(Succeed())
})
func setupGormWithDocker() (*gorm.DB, func()) {
pool, err := dockertest.NewPool("")
chk(err)
runDockerOpt := &dockertest.RunOptions{
Repository: "hub.deepin.com/library/mariadb",
Tag: "10.3.35",
Env: []string{"MARIADB_DATABASE=" + dbName, "MARIADB_ROOT_PASSWORD=" + dbPwd},
}
fnConfig := func(config *docker.HostConfig) {
config.AutoRemove = true
config.RestartPolicy = docker.NeverRestart()
}
resource, err := pool.RunWithOptions(runDockerOpt, fnConfig)
chk(err)
fnCleanup := func() {
err := resource.Close()
chk(err)
}
dsn := fmt.Sprintf("root:%s@tcp(localhost:%s)/%s?charset=utf8&parseTime=True&loc=Local",
dbPwd,
resource.GetPort("3306/tcp"),
dbName,
)
var gdb *gorm.DB
err = pool.Retry(func() error {
gdb, err = gorm.Open("mysql", dsn)
if err != nil {
return err
}
return gdb.DB().Ping()
})
chk(err)
return gdb, fnCleanup
}
func cleanDatabase(db *gorm.DB, dbName string) error {
// 删除数据库内的所有对象,比如数据表,以达到重置数据库的作用
}
func chk(err error) {
if err != nil {
panic(err)
}
}
| 工具 | 说明 |
|---|---|
| ginkgo | Expressive BDD testing framework with Gomega matchers |
| gomega | Ginkgo's Preferred Matcher Library |
| biloba | Stable, performant, automated browser testing for Ginkgo |
| chromedp | Drive Chrome browsers via DevTools Protocol |
| 工具 | 说明 |
|---|---|
| iotest | Std Package - Readers and Writers for testing |
| httptest | Std Package - HTTP testing utilities |
| dockertest | Run integration tests with Docker containers |
| testcontainers-go | Programmatically manage Docker containers |
| 工具 | 类型 | 说明 |
|---|---|---|
| moq | Stub | Generate interface mocks for testing |
| gomonkey | Monkey | Monkey patching library for unit testing |
| mock | Mock | Go mocking framework with code generation |