我正在尝试编写一个简单的测试以更好地理解golang测试,但是测试用例似乎无法执行,并且我期望它会失败。
在我的main.go
中,我有:
package main
import "fmt"
func main() {
fmt.Println("run")
}
func twoSum(nums []int, target int) []int {
lookup := make(map[int]int)
for i, n := range nums {
c := target - n
if j, ok := lookup[c]; ok {
return []int{j, i}
}
lookup[n] = i
}
return []int{}
}
然后在我的main_test.go
中,我有这个:
package main
import (
"reflect"
"testing"
)
var twoSumsCases = []struct{
input []int
target int
expected []int
} {
{
[]int{2,7,11,15},
9,
[]int{0,3},
},
}
func TesttwoSum(t *testing.T) {
for _, tc := range twoSumsCases {
actual := twoSum(tc.input, tc.target)
eq := reflect.DeepEqual(actual, tc.expected)
if eq {
t.Log("expected: ", tc.expected, " actual: ", actual)
} else {
t.Error("expected: ", tc.expected, " actual: ", actual)
}
}
}
然后当我运行go test -v
时...告诉我testing: warning: no tests to run
。我以这个示例为例:https://blog.alexellis.io/golang-writing-unit-tests/...and我认为我已经获得了所需的一切,但不确定为什么测试没有执行。
答案 0 :(得分:3)
将测试功能的名称更改为TestTwoSum
。此名称与testing package documentation第一段中描述的模式匹配:
...它旨在与“ go test”命令配合使用,该命令可自动执行任何形式的功能
func TestXxx(*testing.T)
其中Xxx不以小写字母开头。 ...
答案 1 :(得分:0)
尝试将测试功能重命名为此:
func TestTwoSum(t *testing.T) {
Golang测试非常区分大小写。需要使用Pascal Case以“ Test”开头来命名测试函数,以便go test
工具可以发现它。