Testen einer Sammlung von Funktionen mit Reflection in Go
Problem
Unit-Testen eines Satzes von Funktionen mit ähnlichen Signaturen und Rückgabewerten kann sich wiederholend und umständlich werden. Bei herkömmlichen Ansätzen werden für jede Funktion individuelle Tests geschrieben, was zu einer Codeduplizierung führen kann. Reflection bietet eine Lösung, um diesen Prozess zu optimieren.
Lösung mit Reflection
So nutzen Sie Reflection in Ihren Tests:
Beispielcode
<code class="go">var funcNames = []string{"Func1", "Func2", "Func3"} func TestFunc(t *testing.T) { stype := reflect.ValueOf(s) for _, fname := range funcNames { fmt.Println(fname) sfunc := stype.MethodByName(fname) ret := sfunc.Call([]reflect.Value{}) val := ret[0].Int() if val < 1 { t.Error(fname + " should return positive value") } if !ret[1].IsNil() { t.Error(fname + " shouldn't err") } } }</code>
Hinweis: Wenn ungültig Wenn der Funktionsname angegeben wird, gerät der Test in Panik. Um dies zu mildern:
<code class="go">for _, fname := range funcNames { defer func() { if x := recover(); x != nil { t.Error("TestFunc paniced for", fname, ": ", x) } }() fmt.Println(fname) }</code>
Das obige ist der detaillierte Inhalt vonWie kann Reflection Unit-Tests für Funktionen mit ähnlichen Signaturen in Go optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!