Я пытаюсь написать табличный тест на ходу, где контрольные примеры приведут к различным ошибкам. Затем я хочу проверить, соответствует ли тип ошибки типу ошибки, определенному в тестовом примере, используя errors.As()
. Каждый тестовый случай определяется структурой, поэтому в структуре должен быть тип, который может содержать любую реализацию интерфейса error
, что также позволяет проверить, что в тесте был возвращен правильный тип.
Я попытался определить структуру следующим образом
type testCase struct {
testInput string
expectedError error
}
У меня также есть ряд пользовательских ошибок, которые реализуют интерфейс error
, скажем, одна называется myCustomError
Затем я объявляю переменную этой структуры следующим образом:
mTest := testCase{
testInput: "some failing string",
expectedError: myCustomError{},
}
, если затем я выполню тест следующим образом ...
err := someFunc(mTest.testInput)
if errors.As(err, &mTest.expectedError) {
// test have succeeded
}
... оператор if будетвсегда возвращаю true
, независимо от того, какой из моих пользовательских типов ошибок возвращается.
Я сделал минимальный пример, если это поведение на игровой площадке Go здесь: https://play.golang.org/p/uMdbMvfcdQi
В примере с игровой площадкой я ожидаю, что строка «соответствует myError1» будет напечатана дважды,но вместо этого оно также соответствует myError2
, когда значение сохраняется как обычное значение error
, прежде чем оно будет использовано для проверки типа переменной err.
Можно ли вообще сделать что-то подобное?