我正在为没有返回任何值的方法编写测试用例,例如:
func GetByNameReturnNull(serName string)
{
//Logic
}
我的testcasefile是myTest.go,它有两个参数,一个用无效输入调用方法,用有效输入调用方法。
func Test1(t *testing.T) {
GetByNameReturnNull("Invalid")
}
func Test2(t *testing.T) {
GetByNameReturnNull("valid")
}
因此,第一个测试用例将失败并抛出异常,我无法以常规方式处理它,如
"检查返回方法的错误,因为该方法根本不返回任何内容。 当我执行命令时,
$go test ./... -v
第二个测试用例将不会执行,因为第一个测试用例除外。
因此,如果不更改基本方法中的任何逻辑(GetByNameReturnNull)以返回错误或任何内容,是否有任何方法可以在测试用例文件本身中处理此方案以进行打印
1 fail 1 pass in the output?
答案 0 :(得分:4)
@VonC是正确的,没有办法自动处理它,但是你可以简单地创建一个包装器并在每次测试中调用它。
这样您就不必使用全局变量来跟踪测试。
示例:
func logPanic(t *testing.T, f func()) {
defer func() {
if err := recover(); err != nil {
t.Errorf("paniced: %v", err)
}
}()
f()
}
func Test1(t *testing.T) {
logPanic(t, func() {
GetByNameReturnNull("invalid")
})
//or if the function doesn't take arguments
//logPanic(t, GetByNameReturnNull)
}
func Test2(t *testing.T) {
logPanic(t, func() {
GetByNameReturnNull("valid")
})
}
答案 1 :(得分:3)
如果您希望测试出现恐慌,则不应该看到“1失败” 你应该看到两个测试都成功了。
相反,您应该专门测试恐慌情况,例如,在“Understanding Defer, Panic and Recover ”中所述:
func TestPanic(t *testing.T) error {
defer func() {
fmt.Println("Start Panic Defer")
if r := recover(); r != nil {
fmt.Println("Defer Panic:", r)
} else {
t.Error("Should have panicked!")
}
}()
fmt.Println("Start Test")
panic("Mimic Panic")
}
如果您调用以panic
退出的函数,则该测试将通过。