Как бы вы написали тест для функции, которая возвращает значение, которое может быть либо нулевым, либо конкретным значением? Меня не волнует сама фактическая ценность, мне просто интересно, вернётся ли значение или нет.Тестирование существования на возвращаемое значение, которое может быть конкретным или нулевым
type CustomType struct{}
func TestSomeFunc(t *testing.T) {
case := map[string]struct {
Input string
Expected *CustomType // expected result
Error error // expected error value
} {
"test case 1":
"input",
&CustomType{}, // could be nil or a concrete value
nil,
"test case 2":
"input",
nil, // could be nil or a concrete value
ErrSomeError,
}
actual, err := SomeFunc(case.Input)
if (actual != case.Expected) {
t.Fatalf(...)
}
}
и функция для тестирования может выглядеть примерно так:
func SomeFunc(input string) (*CustomType, error) {
foo, err := doSomething()
if err != nil {
return nil, err
}
return foo, nil
}
Я предполагаю, что логика, я хочу это:
if ((case.Expected != nil && actual == nil) ||
(case.Expected == nil && actual != nil)) {
t.Fatalf(...)
}
Есть ли лучший способ просто утверждать существования вместо сравнения конкретных типов?
Почему вы не можете использовать 'if (case.Expected! = Actual)'? В качестве комментария, поскольку мне может не хватать точки. – abligh
@abligh, которые не будут работать, если они не равны, и ни один из них не равен – BenjaminRH
Условием или оператором, который вы хотите, является [XOR] (https://en.wikipedia.org/wiki/Exclusive_or) (или его отрицание) , который не существует в Go для операндов типа 'bool'. Для получения дополнительной информации/обходной путь, проверьте: [Нет ли оператора XOR для булевых языков в golang?] (Http://stackoverflow.com/questions/23025694/is-there-no-xor-operator-for-booleans-in-golang) – icza