2016-11-28 63 views
2

我有一個問題,在使用testify在golang中聲明一個聲明爲變量的函數。Golang測試聲明爲變量的函數(作證)

在同一個包中聲明的測試和函數。

var testableFunction = func(abc string) string {...} 

現在我有一個不同的文件與單元測試調用testableFunction

func TestFunction(t *testing.T){ 
    ... 
    res:=testableFunction("abc") 
    ... 
} 

調用TestFunction與go test不會觸發任何異常,但testableFunction實際上是永遠不會運行。爲什麼?

回答

2

這是因爲您的testableFunction變量被分配到代碼中的其他位置。

見這個例子:

var testableFunction = func(s string) string { 
    return "re: " + s 
} 

測試代碼:

func TestFunction(t *testing.T) { 
    exp := "re: a" 
    if got := testableFunction("a"); got != exp { 
     t.Errorf("Expected: %q, got: %q", exp, got) 
    } 
} 

運行go test -cover

PASS 
coverage: 100.0% of statements 
ok  play 0.002s 

顯然,如果一個新的函數值在測試執行之前分配給testableFunction,然後用匿名函數初始化變量樂不會被測試調用。

爲了證明,你的測試功能改成這樣:

func TestFunction(t *testing.T) { 
    testableFunction = func(s string) string { return "re: " + s } 

    exp := "re: a" 
    if got := testableFunction("a"); got != exp { 
     t.Errorf("Expected: %q, got: %q", exp, got) 
    } 
} 

運行go test -cover

PASS 
coverage: 0.0% of statements 
ok  play 0.003s