package GoLearn
import "testing"
//go test命令是一个按照一定的约定和组织来测试代码的程序。
//所有以_test.go为后缀名的源文件在执行go build时不会被构建成包的一部分,它们是go test测试的一部分。
//在*_test.go文件中,有三种类型的函数:测试函数、基准测试(benchmark)函数、示例函数。
//一个测试函数是以Test为函数名前缀的函数,用于测试程序的一些逻辑行为是否正确;go test命令会调用
//这些测试函数并报告测试结果是PASS或FAIL。
//基准测试函数是以Benchmark为函数名前缀的函数,它们用于衡量一些函数的性能;
//go test命令会多次运行基准测试函数以计算一个平均的执行时间。
//示例函数是以Example为函数名前缀的函数,提供一个由编译器保证正确性的示例文档
//go test命令会遍历所有的*_test.go文件中符合上述命名规则的函数,生成一个临时的main包用于调用相应的测试函数,接着构建并运行、报告测试结果,最后清理测试中生成的临时文件。
// 每个测试函数必须导入testing包。
// 测试函数有如下的签名:
func TestName(t *testing.T) {
// ...
}
// 名字必须以Test开头
// 可选的后缀名必须以大写字母开头
func TestSin(t testing.T) { / ... */ }
func TestCos(t testing.T) { / ... */ }
func TestLog(t testing.T) { / ... */ }
//其中t参数用于报告测试失败和附加的日志信息。 /
// package GoLearn
import "testing"
func TestPalindrome(t *testing.T) {
if !IsPalindrome("detartrated") {
t.Error(IsPalindrome("detartrated") = false)
}
if !IsPalindrome("kayak") {
t.Error(IsPalindrome("kayak") = false)
}
}
func TestNonPalindrome(t *testing.T) {
if IsPalindrome("palindrome") {
t.Error(IsPalindrome("palindrome") = true)
}
}
//go test命令如果没有参数指定包那么将默认采用当前目录对应的包
var bb = []int{1, 2, 3, 4, 5}
var a = []struct {
i string
w bool
}{
{"", true},
}
//随机测试
//那么对于一个随机的输入,我们如何能知道希望的输出结果呢?这里有两种处理策略。第一个是编写另一个对照函数,使用简单和清晰的算法,虽然效率较低但是行为和要测试的函数是一致的,然后针对相同的随机输入检查两者的输出结果。第二种是生成的随机输入的数据遵循特定的模式,这样我们就可以知道期望的输出的模式。
//黑盒测试只需要测试包公开的文档和API行为
//白盒测试有访问包内部函数和数据结构的权限