gpt4 book ai didi

go - stretr/testify/assert 只提供堆栈跟踪,缺少实际的错误消息

转载 作者:IT王子 更新时间:2023-10-29 01:14:26 26 4
gpt4 key购买 nike

我有以下测试,我想将其转换为使用 github.com/stretchr/testify/assert 导入,完成这项工作的最佳做​​法是什么?现在的代码:

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

Error: FAIL | --- FAIL: TestSdk (0.00s) | sdk_test.go:48: Unable to get VMware SDK: Please set environment variables: HCI_ENDPOINT, HCI_USERNAME and HCI_PASSWORD | panic: runtime error: invalid memory address or nil pointer dereference [recovered] | panic: runtime error: invalid memory address or nil pointer dereference | [signal SIGSEGV: segmentation violation code=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 | panic(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 | created by testing.(*T).Run | /usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:878 +0x353 FAIL | 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 | --- FAIL: TestSdk (0.00s) | panic: runtime error: invalid memory address or nil pointer dereference [recovered] | panic: runtime error: invalid memory address or nil pointer dereference | [signal SIGSEGV: segmentation violation code=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 | panic(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 | created by testing.(*T).Run | /usr/local/Cellar/go/1.11.1/libexec/src/testing/testing.go:878 +0x353 FAIL | github.com/kubicorn/kubicorn/cloud/vmware/vmwareSdkGo 0.034s

这里我遗漏了被调用函数的实际错误消息。

最佳答案

代替 defer sdk.GovClient.Logout(ctx) 尝试 defer func() { if (ctx!=nil) { sdk.GovClient.Logout(ctx) }

第二个 panic 来自这个延迟错误的 ctx

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

关于go - stretr/testify/assert 只提供堆栈跟踪,缺少实际的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52951913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com