
Go 的 go test 命令仅执行名称以大写字母 Test 开头、接收单个 *testing.T 参数的函数;若测试函数命名为 testTest(小写 t 开头),将被完全忽略,导致“no tests to run”警告。
go 的 go test 命令仅执行名称以大写字母 test 开头、接收单个 *testing.t 参数的函数;若测试函数命名为 testtest(小写 t 开头),将被完全忽略,导致“no tests to run”警告。
在 Go 中,测试函数不是通过注解或配置注册的,而是严格依赖命名约定。根据 Go 官方文档(testing 包规范),一个合法的测试函数必须满足以下全部条件:
- 所在包为被测包(通常不能是
main包,除非使用-c构建测试二进制); - 函数名以字母
Test开头(注意:首字母大写,且紧接Test,不可有下划线或小写字母前置); - 函数签名必须为:
func TestXxx(t *testing.T),其中Xxx为非空驼峰式后缀(如TestString,TestMethod); - 必须位于以
_test.go结尾的文件中(推荐,但非强制;若放在普通.go文件中,需确保该文件不参与构建主程序)。
你提供的测试代码中,函数名为 testTest —— 首字母小写,不符合 TestXXX 格式,因此 go test 在扫描时直接跳过,最终报告:
testing: warning: no tests to run
✅ 正确写法如下(修改后的 test_test.go):
package test
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestTest(t *testing.T) { // ✅ 首字母大写 Test + 驼峰后缀
assert.Equal(t, "test", test(), "String was not test")
}同时确保你的实现文件(如 test.go)与测试文件(如 test_test.go)处于同一目录,并属于同一包(package test)。注意:不要将测试放在 package main 中——Go 不允许 main 包包含测试函数(会报错 cannot define test function in package main)。
? 补充注意事项:
- 运行测试前,请确认当前工作目录是包含
*_test.go文件的包根目录; - 使用
go test -v可显示详细执行过程,便于验证是否识别到测试函数; - 若仍提示无测试,可通过
go test -list=.列出所有匹配的测试函数名,快速排查命名问题; - Go 1.7.1 虽较旧,但已完全支持该命名规则;建议升级至 Go 1.21+ 以获得更好工具链支持与安全性保障。
遵循这一简单而严格的命名约定,即可让 go test 稳定、可靠地发现并运行你的测试用例。

















