首页 文章

stretchr / testify / assert只是给出堆栈跟踪,缺少实际的错误消息

提问于
浏览
3

我有以下测试,我想转换为使用 github.com/stretchr/testify/assert import,这样做的最佳做法是什么?代码现在是:

func TestSdk(t *testing.T) {
    ctx := context.Background()

    sdk, err := NewSdk(ctx)
    if err != nil {
        t.Errorf("Unable to get VMware SDK: %v", err)
    }

    defer sdk.GovClient.Logout(ctx)
}

错误:失败| --- FAIL:TestSdk(0.00s)| sdk_test.go:48:无法获取VMware SDK:请设置环境变量:HCI_ENDPOINT,HCI_USERNAME和HCI_PASSWORD | panic:运行时错误:无效的内存地址或nil指针取消引用[recover] | panic:运行时错误:无效的内存地址或nil指针取消引用| [信号SIGSEGV:分段违规代码= 0x1 addr = 0x0 pc = 0x151cc31] | goroutine 6 [running]:| testing.tRunner.func1(0xc00019a100)| /usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:792 0x387 |恐慌(0x1642c20,0x1f46a80)| /usr/local/Cellar/go/1.11.1/libexec/src/runtime/panic.go:513 0x1b9 | github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo.TestSdk(0xc00019a100)| /Users/jonma/go/src/github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo/sdk_test.go:51 0x121 | testing.tRunner(0xc00019a100,0x1825b48)| /usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:827 0xbf |通过测试创建 . (* T) . 运行| /usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:878 0x353失败| github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo 0.019s

这是我改变的,这种方法的问题是,错误消息不会显示只是一些长堆栈跟踪

func TestSdk(t *testing.T) {
    ctx := context.Background()

    sdk, err := NewSdk(ctx)

    assert.Errorf("Unable to get VMware SDK: %v", err)

    defer sdk.GovClient.Logout(ctx)
}

失败| --- FAIL:TestSdk(0.00s)| panic:运行时错误:无效的内存地址或nil指针取消引用[recover] | panic:运行时错误:无效的内存地址或nil指针取消引用| [信号SIGSEGV:分段违规代码= 0x1 addr = 0x0 pc = 0x151eecf] | goroutine 6 [running]:| testing.tRunner.func1(0xc00019e100)| /usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:792 0x387 |恐慌(0x1645200,0x1f4aab0)| /usr/local/Cellar/go/1.11.1/libexec/src/runtime/panic.go:513 0x1b9 | github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo.TestSdk(0xc00019e100)| /Users/jonma/go/src/github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo/sdk_test.go:57 0x1ef | testing.tRunner(0xc00019e100,0x1828420)| /usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:827 0xbf |通过测试创建 . (* T) . 运行| /usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:878 0x353失败| github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo 0.034s

在这里,我错过了被调用函数的实际错误消息 .

1 回答

  • 0

    而不是 defer sdk.GovClient.Logout(ctx) 尝试 defer func() { if (ctx!=nil) { sdk.GovClient.Logout(ctx) }

    第二个恐慌来自于这个推迟不正确的ctx

    (我这里没有vmwareSDK在我面前,关键是在尝试之前检查sdk.GovClient.Logout是否有一个有效的参数)

相关问题