2017-02-22 87 views
0

я получил следующую функцию TestMain:golang TestMain() устанавливает переменную, которая не может получить доступ с помощью тестов

func TestMain(m *testing.M) { 
    db := "[working_db_connection]" 
    dbInstance, _ := InitializeRepo(db, 2) 
    runTests := m.Run() 
    os.Exit(runTests) 
} 

и следующий образец теста

func TestSomeFeature(t *testing.T) { 
    fmt.Println(dbInstance) 
} 

Функция TestSomeFeature делает но говорит, что dbInstance не определено. Почему это не имеет доступа к переменной? Из примеров я вижу, что переменные et в TestMain доступны с этим синтаксисом.

ответ

4

dbInstance - локальная переменная TestMain и ее не существует в жизненном цикле TestSomeFeature. и по этой причине в тестовом наборе вам сообщается, что dbInstance не определен.
Определить переменную как глобальную переменную вне TestMain, а затем создать экземпляр переменной в TestMain

var DbInstance MyVariableRepoType 

func TestMain(m *testing.M) { 
    db := "[working_db_connection]" 
    DbInstance, _ = InitializeRepo(db, 2) 
    runTests := m.Run() 
    os.Exit(runTests) 
} 
3

Вы должны быть переменная, определенный за пределами какой-либо функции.

var dbInstance DbType