2016-11-28 4 views
2

Ich habe ein Problem beim Auslösen einer Funktion als Variable in Golang deklariert mit aussagen.Golang Testen von Funktionen als Variable deklariert (aussagen)

Test und Funktion beide im selben Paket erklärt.

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

jetzt habe ich eine andere Datei mit Unit-Test testableFunction

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

Aufruf Testfunction mit go test keine Ausnahme abfeuert, aber testableFunction ist eigentlich nie ausgeführt aufrufen. Warum?

Antwort

2

Das liegt daran, dass Ihre Variable irgendwo anders in Ihrem Code zugewiesen wird.

Sehen Sie folgendes Beispiel:

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

Prüfregeln:

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 Laufen:

PASS 
coverage: 100.0% of statements 
ok  play 0.002s 

Natürlich, wenn ein neuer Funktionswert zu testableFunction vor der Testdurchführung zugeordnet ist, dann die anonyme Funktion, die verwendet wird, um deine Variable zu initialisieren Le wird nicht durch den Test aufgerufen.

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) 
    } 
} 

Lauf go test -cover:

PASS 
coverage: 0.0% of statements 
ok  play 0.003s 

Um zu demonstrieren, das Ihre Testfunktion ändern

Verwandte Themen