2017-02-04 5 views
1

Wenn Sie Unit-Test-Funktionen, die eine error Rückgabetyp haben, habe ich mich gefragt, wie für diesen Fehler Unit Test ordnungsgemäß testen. Solltest du nur überprüfen, ob der Fehler gleich null ist oder nicht? Oder sollen Sie überprüfen, ob die Fehlerzeichenfolge auch mit einer erwarteten Zeichenfolge übereinstimmt?Wie Unit-Test Go-Fehler

Antwort

1

In den meisten Fällen können Sie nur überprüfen, ob der Fehler nicht null ist.

Ich würde empfehlen, Fehlerstrings nicht zu überprüfen, es sei denn, dies ist absolut notwendig. Ich denke generell, dass Fehlerzeichen nur für den menschlichen Verzehr bestimmt sind.

Wenn Sie mehr Details über den Fehler benötigen, ist eine bessere Alternative benutzerdefinierte Fehlerarten. Dann können Sie den Fehler (Typ) ändern und sehen, ob es ein Typ ist, den Sie erwarten. Wenn Sie noch mehr Details benötigen, können Sie festlegen, dass die benutzerdefinierten Fehlertypen Werte enthalten, die Sie dann in einem Test überprüfen können.

Gos Fehler ist nur eine Schnittstelle für einen Typ, der eine Error() string-Methode hat, so dass die Implementierung selbst einfach ist. https://blog.golang.org/error-handling-and-go

+0

Ich mag die Idee, benutzerdefinierte Fehlertypen zu verwenden, die Dinge definitiv vereinfachen würden. – GabeMeister

2

Ja ich meine Funktion testen, die den Fehler zurückgeben und überprüfen, ob die Fehlermeldung übereinstimmt. Aber es liegt an Ihnen, ob Sie es überprüfen möchten oder nur den Fehler überprüfen ist nicht nil.

nehme an, Sie eine Funktion wie dieses:

// testing tot get error message 
func TestReturnSomeErr(t *testing.T){ 
    Expected := "this is error message" 
    actual := returnSomeErr(-1) 

    if actual.Error() != Expected{ 
     t.Errorf("Error actual = %v, and Expected = %v.", actual, test.Expected) 

    } 

} 

Beachten Sie, dass ich verwende .Error() Funktion, um die Fehlermeldung zu erhalten, so:

func returnSomeErr(input int)error{ 
    if input > 0{ 
     return nil 
    } 
    return errors.New("this is error message") 
} 

Sie Gerät die Fehlermeldung wie folgt testen dass ich es mit String vergleichen kann. Sie können einen weiteren Test erstellen, um zu testen, ob bei den Eingabedaten > 0.