У меня есть структура каталогов, например:
./gen/items/items.go
./gen/items/items_test.go
./gen/items/data/items.xml
./engine/action/actions_test.go
В items.go
У меня есть метод, который должен запускаться один раз, и заполнить некоторую структуру данных элементами, загруженными из items.xml
. Я делаю это с абсолютным путем, который работает, когда код выполняется в items_test.go
, так как я предполагаю, что текущий рабочий каталог в go test является корнем пакета текущего протестированного пакета.
itemsXMLPath := "./data/items.xml"
absPath, err := path.Abs(itemsXMLPath)
if err != nil {
...
}
bytes, err := ioutil.ReadFile(absPath)
YouЗдесь можно понять, почему абсолютный путь ./data/items.xml
отлично работает из gen/items
dir.
Если я запускаю тесты в actions_tests.go
, он пытается использовать относительный путь из action
и терпит неудачу, потому что нетdata
dir в action
.
Когда я вызываю мой метод loadFromXML в items.go
, я хочу, чтобы он всегда использовал относительный путь из items
dir, который будетпоиск по каталогу данных ниже.
Я предположил, что поскольку вызывающий код находится в items.go
, путь будет идти оттуда, но, похоже, он использует рабочий каталог тестового бегуна или бегунка go(если я запускаю main.go).
Есть ли способ убедиться, что в тестовом прогоне или из основного прогона функция загрузки xml использует относительный путь из непротиворечивого каталога в репозитории (например, как бы я последовательно находил пакет rootn запускается из MAIN или из теста).
Я уверен, что есть способ достичь этого без дублирования тестовых данных или без передачи относительного пути к функции loadFromXML, которая должна быть настроена на основегде метод вызывается!