TestMain не запускается

У меня есть тестовый пакет, который проверяет некоторые вещи, зависящие от чтения конфигурации. Я хочу прочитать эту конфигурацию один раз перед запуском всех тестов, поэтому я пытаюсь использовать TestMain(m *testing.M):

main.go:

package tests

import (
    ...
)

var logger = logging.MustGetLogger("tests")

func TestMain(m *testing.M) {
    logger.Info("Initializing test suite")

    viper.SetConfigName("config")
    viper.AddConfigPath("..\\..\\")
    err := viper.ReadInConfig()
    if err == nil {
        os.Exit(m.Run())
    } else {
        logger.Fatal("Could not read configuration")
    }
}

И у меня есть еще один файл в том же каталоге (и пакете) с тестом.

repository_test.go:

package tests

import (
    ...
)

func TestCreation(t *testing.T) {
    aa := myModule.CreateRepository()
    assert.NotNil(t, aa)
}

Моя проблема в том, что тест не проходит, потому что конфигурация не читается из файла. Когда я пытаюсь отладить тест в Gogland, точка останова внутри TestMain не срабатывает. Когда я запускаю тесты из командной строки, я не вижу распечаток из TestMain.

Есть ли что-то особенное, что я должен сделать, чтобы это сработало? Из того, что я читал в Интернете, я понял, что если я определю TestMain(m *testing.M), то он будет запускаться только один раз для пакета, и именно здесь я должен написать любой код установки или удаления.


person Dina    schedule 05.07.2017    source источник
comment
Все файлы в наборе тестов (включая файл, определяющий TestMain) должны оканчиваться на *_test.go. Переименуйте его, например, main_test.go   -  person putu    schedule 05.07.2017
comment
@putu omg! Это должно быть так. Я чувствую себя идиотом. Проверю, как только я буду рядом со своим компьютером!   -  person Dina    schedule 05.07.2017
comment
Да, действительно, именно так. Что ж, по крайней мере, теперь я уверен, что со мной такое больше никогда не повторится.   -  person Dina    schedule 06.07.2017


Ответы (2)


TestMain выполняется только в тестовых файлах (суффикс _test.go).

Переместите функцию в файл repository_test.go, чтобы исправить это.

person MTvB    schedule 05.07.2017

Убедитесь, что для конфигурации запуска установлено значение «Пакет, а не файл» в «Выполнить | Редактировать конфигурации ... | Go Test | Имя вашей конфигурации, и это должно сработать. Если это не так, опубликуйте команды, которые IDE запускает для выполнения тестов.

person dlsniper    schedule 05.07.2017
comment
Спасибо. Я сейчас не рядом с компьютером. Попробую позже. Но как насчет запуска из командной строки? Мне это нужно, чтобы работать и над TeamCity. В TeamCity мы используем go test -v path / tests. - person Dina; 05.07.2017
comment
В этом разница между запуском определенного файла и пакета (или каталога). В TeamCity, если вы не укажете все файлы вручную, этот путь выглядит как каталог / пакет. Go будет запускать функции Test только в одном файле, если вы укажете этот файл. Пожалуйста, дайте мне знать, помогло изменение конфигурации или нет. - person dlsniper; 05.07.2017