我正在嘗試在 go 中編寫一個表測試,其中測試用例將導(dǎo)致不同的錯誤。然后我想檢查錯誤的類型是否與測試用例中定義的錯誤類型匹配,使用errors.As(). 每個測試用例都由一個結(jié)構(gòu)體定義,因此結(jié)構(gòu)體中需要有一個類型可以保存接口的任何實現(xiàn)error,這也是為了驗證測試中返回的類型是否正確。我嘗試如下定義結(jié)構(gòu)type testCase struct { testInput string expectedError error}我還有許多實現(xiàn)該error接口的自定義錯誤,假設(shè)其中一個稱為myCustomError然后我聲明該結(jié)構(gòu)的變量,如下所示:mTest := testCase{ testInput: "some failing string", expectedError: myCustomError{},}如果我然后像這樣進(jìn)行測試......err := someFunc(mTest.testInput)if errors.As(err, &mTest.expectedError) { // test have succeeded}... if 語句將始終返回true,無論返回哪種自定義錯誤類型。如果 Go Playground 上存在這種行為,我在這里做了一個最小的示例:https://play.golang.org/p/uMdbMvfcdQi在游樂場示例中,我希望字符串“matching myError1”打印兩次,但當(dāng)該值在用于檢查變量 err 的類型之前以myError2普通形式存儲時,它也會匹配。 是否有可能做這樣的事情?error
1 回答

POPMUISE
TA貢獻(xiàn)1765條經(jīng)驗 獲得超5個贊
在測試用例中存儲指向目標(biāo)值的指針。
type testCase struct {
testInput string
expectedError interface{}
}
mTest := testCase{
testInput: "some failing string",
expectedError: &myCustomError{},
}
err := someFunc(mTest.testInput)
if errors.As(err, mTest.expectedError) {
// test have succeeded
}
最小示例: https: //play.golang.org/p/igJy9L_ui73
- 1 回答
- 0 關(guān)注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消