在Go语言中,编写测试用例是一种很好的实践,用于确保代码的正确性和可维护性。Go提供了一个内建的testing
包,它提供了编写和运行测试用例的基础功能。
以下是一个简单的Go测试用例的示例:
package example // 这里应该是你的包名
import (
"testing"
)
// 假设你有一个要测试的函数
func Add(a, b int) int {
return a + b
}
// 测试用例使用"Test"前缀,后跟一个描述性的名称
// 并且接收一个*testing.T类型的参数
func TestAdd(t *testing.T) {
// 调用要测试的函数
result := Add(1, 2)
// 使用t.Errorf来报告错误(如果有的话)
// 在这里,我们检查结果是否等于我们期望的值
if result != 3 {
t.Errorf("Add(1, 2) = %d; want 3", result)
}
}
// 你可以编写多个测试用例
func TestAddNegative(t *testing.T) {
result := Add(-1, -2)
if result != -3 {
t.Errorf("Add(-1, -2) = %d; want -3", result)
}
}
// 运行测试用例
// 在命令行中,你可以使用以下命令来运行测试:
// go test
当你运行go test
命令时,Go会查找当前包中所有以Test
开头且接收一个*testing.T
参数的函数,并将它们作为测试用例运行。每个测试用例都会在一个新的goroutine中执行,因此它们是并发的。
如果测试用例中的任何t.Errorf
被调用,那么该测试用例将失败,并且错误消息将被打印出来。你可以使用t.Log
来记录测试用例中的信息,这些信息在测试用例成功时也会被打印出来,但在失败时不会阻止测试用例的执行。
你还可以在测试用例中使用其他testing.T
的方法来控制测试用例的执行流程,例如t.Skip
和t.FailNow
。
此外,你还可以编写基准测试(benchmark tests),它们以Benchmark
为前缀,并接收一个*testing.B
类型的参数。基准测试用于测量代码的性能,并给出每次操作的大致执行时间。
测试用例文件位置:
确保测试文件位于与你的包相对应的目录中。例如,如果你的包名是mathapi,那么测试文件应该位于mathapi目录下或者其子目录下。
mathapi/
main.go
subpkg/
subpkg.go
subpkg_test.go
你可以运行go test ./…来测试所有子包。
测试命令
您的解释和命令都是正确的,这些命令分别用于在Go中执行测试用例。下面是对您提供的命令的一些详细说明和关于如何指定特定测试用例的补充:
- 执行当前目录下的全部测试用例,不递归子目录中的测试用例
go test .
这个命令会执行当前目录下所有名为*_test.go
的测试文件,但不会递归到子目录中查找和执行测试用例。
- 执行当前目录下的全部测试用例,递归子目录中的测试用例
go test ./...
使用./...
作为参数会告诉go test
递归地查找并执行当前目录及其所有子目录中的测试用例。
- 执行当前目录下的全部测试用例并显示测试过程中的日志内容,不递归子目录中的测试用例
go test -v .
-v
(或--verbose
)标志告诉go test
在测试执行过程中输出额外的日志信息,如每个测试用例的开始和结束、测试结果的输出等。
- 执行当前目录下的全部测试用例并显示测试过程中的日志内容,递归子目录中的测试用例
go test -v ./...
与上面类似,但这次会递归地查找并执行测试用例。
- 执行指定的测试用例
要执行特定的测试用例,您可以使用-run
标志,并传递一个正则表达式来匹配您想要运行的测试用例名称。测试用例名称是Test
后跟一个或多个大写字母、数字和下划线的组合。
go test -v . -run TestValid
上面的命令会执行名称以TestValid
开头的所有测试用例。请注意,不需要在正则表达式前后加^
和$
,除非您确切地只想匹配这个特定的名字(没有其他字符)。
如果您确实只想匹配名为TestValid
的测试用例(没有其他字符),则可以使用以下命令:
go test -v . -run ^TestValid$
但通常,只要测试用例名称以您提供的字符串开头,它就会被执行,所以简单的TestValid
通常就足够了。
请注意,在使用-run
参数时,go test
仍然会编译和运行所有测试文件,但只会执行与给定正则表达式匹配的测试用例。如果测试文件或测试用例的编译失败,整个go test
命令将失败,即使与正则表达式匹配的测试用例可能成功。