2017-02-04 138 views
1

当您使用返回类型为error的单元测试函数时,我想知道如何正确地对这个错误进行单元测试。你是否应该检查错误是零还是不是零?或者你是否应该验证错误字符串是否与期望的字符串匹配?如何进行单元测试出错

回答

1

在大多数情况下,您可以检查错误是否不为零。

我建议不要检查错误字符串,除非绝对必要。我通常认为错误字符串只能用于人类消费。

如果您需要更多关于错误的详细信息,更好的选择是自定义错误类型。然后,您可以切换错误(类型)并查看它是否是您期望的类型。 如果您需要更多详细信息,可以使自定义错误类型包含您可以在测试中检查的值。

Go的错误只是一个具有Error() string方法的类型的接口,因此自己实现它们很简单。 https://blog.golang.org/error-handling-and-go

+0

我喜欢使用自定义错误类型的想法,这肯定会简化一些事情。 – GabeMeister

2

是的我测试我的函数返回错误,并检查它,如果错误消息匹配。但这取决于你是否要检查它或只检查错误是不是nil

假设你有这样的功能:

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

可以进行单元测试这样的错误消息:

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

    } 

} 

请注意,我用.Error()函数来获取错误消息,以便我可以将它与字符串进行比较。如果输入数据为> 0,您可以创建另一个测试来测试是否没有错误。