为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕码人2483693 2021-08-10 20:56:29
我正在为不返回任何值的方法编写测试用例,例如: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?
查看完整描述

2 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

无法自动处理它,但是您可以简单地制作一个包装器并在每个测试中调用它。


这样您就不必使用全局变量来跟踪测试。


例子:


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

    })

}


查看完整回答
反对 回复 2021-08-10
?
慕容3067478

TA贡献1773条经验 获得超3个赞

如果您希望您的测试恐慌,您不应该看到“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.



查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信