猿问

在异常期间在 golang 中运行测试用例

我正在为不返回任何值的方法编写测试用例,例如:


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)中的任何逻辑以返回 err 或任何内容的情况下,是否有任何方法可以在测试用例文件本身中处理这种情况以进行打印


1 fail 1 pass in the output?


慕码人2483693
浏览 228回答 2
2回答

翻过高山走不出你

无法自动处理它,但是您可以简单地制作一个包装器并在每个测试中调用它。这样您就不必使用全局变量来跟踪测试。例子: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")    })}

慕容3067478

如果您希望您的测试恐慌,您不应该看到“1 次失败”。您应该会看到两个测试都成功。相反,您应该专门测试恐慌情况,例如“了解延迟、恐慌和恢复”中所述: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.
随时随地看视频慕课网APP

相关分类

Go
我要回答