go测试用例不在主程序包中运行

时间:2019-05-03 03:42:44

标签: go

我正在尝试编写一个简单的测试以更好地理解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我认为我已经获得了所需的一切,但不确定为什么测试没有执行。

2 个答案:

答案 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工具可以发现它。