以下模板参考了下 elasticsearch 包里的单元测试, 可以很方便的接入到各种单元测试函数中,后续增加案例也很方便
假设待测试的函数如下:
//待测试函数======>校验字符串是否为数字
func IsInteger(s string) bool {
if len(s) == 0 {
return true
}
b, _ := regexp.MatchString("^[0-9]+$", s)
return b
}
单元测试函数如下:
func TestIsInteger(t *testing.T) {
tests := []struct {
Input string
Expected bool
}{
{
"123456789",
true,
},
{
"a123456789",
false,
},
}
for i, test := range tests {
got := IsInteger(test.Input)
if got != test.Expected {
t.Errorf("TestIsInteger case #%d: expected %v; got: %v", i+1, test.Expected, got)
}
}
}
对于测试函数的多个输入值类型不确定的情况下,可以定义 interface{} 类型的数组,然后在传参的时候转为相应类型
//待测试函数======>字符串转时间戳
func ParseTimeInProp(value string, vtype int32) (t int64, err error) {
if value == "" {
return 0, errors.New("value 为空")
}
...
return
}
单元测试函数:
type TestElement interface{}
func TestParseTimeInProp2(t *testing.T) {
tests := []struct {
Input []TestElement
Expected int64
}{
{
[]TestElement{
`{"value": "2018-05-20"}`, 0},
1526745600000,
},
{
[]TestElem