慕无忌1623718
如果我理解正确,您希望在某些条件下检查正确的错误返回。这是:func coolFunction(input int) (int, error) { var err error var number int if input == 1 { err = errors.New("This is an error") number = 400 } else { err = nil number = 200 } return number, err}然后在测试文件中,您需要对预期错误的事实(理所当然)有一个理解或协议。就像下面的标志一样,这对于您的情况来说是正确的。expectError bool您还可以为特定错误类型设置字段,并检查返回的类型是否正是该字段。func TestCoolFunction(t *testing.T) { var testTable = []struct { desc string in int expectError bool out int }{ {"Should_fail", 1, true, 0}, {"Should_pass", 100, false, 200}, } for _, tt := range testTable { t.Run(tt.desc, func(t *testing.T) { out, err := coolFunction(tt.in) if tt.expectError { if err == nil { t.Error("Failed") } } else { if out != tt.out { t.Errorf("got %d, want %d", out, tt.out) } } }) }}使用@mkopriva建议添加特定的错误检查DeepEqualfunc TestCoolFunction(t *testing.T) { var testTable = []struct { desc string in int expectError error out int }{ {"Should_fail", 1, errors.New("This is an error"), 0}, {"Should_pass", 100, nil, 200}, } for _, tt := range testTable { t.Run(tt.desc, func(t *testing.T) { out, err := coolFunction(tt.in) if tt.expectError != nil { if !reflect.DeepEqual(err, tt.expectError) { t.Error("Failed") } } else { if out != tt.out { t.Errorf("got %d, want %d", out, tt.out) } } }) }}另外,为了演示,您应该使用一些不同的方法来检查更快的错误。这取决于应用程序中错误的设计方式。您可以使用哨兵错误或类型/接口检查。或者自定义错误类型中基于 const 的枚举字段。DeepEqual