У нас есть пакет с достаточным количеством сложных тестов. Как часть набора тестов, они работают на сборках и т. Д.
func TestFunc(t *testing.T) {
//lots of setup stuff and defining success conditions
result := SystemModel.Run()
}
Теперь для одного из этих тестов я хочу представить какой-нибудь интерфейс, который позволит мне отладить несколько вещей. Это на самом деле не тест, а инструмент отладки. Для этого я хочу просто запустить тот же тест, но с шаблоном Builder:
func TestFuncWithFrontend(t *testing.T) {
//lots of setup stuff and defining success conditions
result := SystemModel.Run().WithHTTPFrontend(":9999")
}
Тогда тест начнется только в том случае, если я отправлю сигнал через HTTP из внешнего интерфейса. В основном WithHTTPFrontend()
просто ожидает канал с HTTP-вызовом из внешнего интерфейса.
Это, конечно, приведет к сбою автоматических тестов, поскольку такой сигнал не будет отправлен и выполнение будет зависать.
Я не могу просто переименовать пакет в main
, поскольку в пакете 15 файлов, и они используются в других местах системы.
Точно так же я не нашел способа запустить тест только по требованию, исключая его из набора тестов, чтобы TestFuncWithFrontend
запускался только из командной строки - мне все равно, если go run
или go test
или что угодно.
Я также думал о ExampleTestFunc()
, но в результате теста получилось так много выводов, что он бесполезен, и без определения Output: ...
Пример не запустится.
К сожалению, на уровне пакета (частного, то есть в нижнем регистре) также требуется много кода инициализации, который необходим тесту. Поэтому я не могу просто создать подпакет main
, так как многие из этих вещей не будут доступны.
Кажется, у меня есть три варианта:
Экспортируйте все эти переменные инициализации и код в верхнем регистре, чтобы я мог использовать его из вспомогательного пакета
Дублируйте весь код.
Переместите тест в подпакет main
, а затем получите func main()
для теста с Frontend и _test.go
для обычного теста, который должен был бы импортировать несколько вещей из родительского пакет.
Я бы предпочел избежать второго варианта ... И первый лучше, но тоже не велик ИМХО. Я думаю, что я пойду на третий, но ...
я что-то упустил?