2016-11-28 5 views
2

У меня проблема с функцией функции, объявленной как переменная в golang с testify.Golang тестирование функций, объявленных как переменные (свидетельство)

Тест и функция оба заявлены в одном пакете.

var testableFunction = func(abc string) string {...} 

теперь у меня есть другой файл с модульного тестирования вызова testableFunction

func TestFunction(t *testing.T){ 
    ... 
    res:=testableFunction("abc") 
    ... 
} 

Вызов функции теста с go test не срабатывают никаких исключений, но testableFunction фактически не не запускать. Зачем?

ответ

2

Это потому, что ваша переменная testableFunction получает назначение в другом месте вашего кода.

Смотрите этот пример:

var testableFunction = func(s string) string { 
    return "re: " + s 
} 

Тестовый код:

func TestFunction(t *testing.T) { 
    exp := "re: a" 
    if got := testableFunction("a"); got != exp { 
     t.Errorf("Expected: %q, got: %q", exp, got) 
    } 
} 

Бег go test -cover:

PASS 
coverage: 100.0% of statements 
ok  play 0.002s 

Очевидно, что если новое значение функции присваивается testableFunction до выполнения теста, то анонимная функция, используемая для инициализации вашего variab тест не будет вызван.

Чтобы продемонстрировать, измените функцию тестирования на это:

func TestFunction(t *testing.T) { 
    testableFunction = func(s string) string { return "re: " + s } 

    exp := "re: a" 
    if got := testableFunction("a"); got != exp { 
     t.Errorf("Expected: %q, got: %q", exp, got) 
    } 
} 

Бег go test -cover:

PASS 
coverage: 0.0% of statements 
ok  play 0.003s 

 Смежные вопросы

  • Нет связанных вопросов^_^