Как проверить код Go с путями к файлам, определенными как константы - PullRequest
2 голосов
/ 22 апреля 2019

Я пишу тесты для моего проекта, который включает фиксированные пути к файлам и базовые URL. На мой взгляд, самый логичный способ их определения - с помощью открытых / закрытых констант в соответствующем модуле, но это мешает хорошей практике тестирования. Как я могу обойти это?

Я искал возможное решение и обнаружил, что могу определить два конструктора для структуры, нуждающейся в пути: один, который определяет путь по умолчанию, а другой, который принимает собственный путь

func Construct(param string) MyStruct {
    return MyStruct {Param: param, Path: "/default/path"}
}

func ConstructWithPath(param, path string) MyStruct {
    return MyStruct {Param: param, Path: path}
}

Это довольно уродливо для меня, и это решение предназначено исключительно для тестов, поскольку пути, которые я рассматриваю, фиксированы и известны.

Ответы [ 2 ]

4 голосов
/ 22 апреля 2019

Это известно как внедрение зависимостей и обычно используется для тестирования.Нет ничего особенно уродливого в том, чтобы сделать ваш код более тестируемым.

В качестве альтернативы можно было бы определить пути как var s в пакете (сделать их закрытыми - тесты живут в одном пакете), и тесты могут быть установленыэти переменные перед чем-то делать.

0 голосов
/ 22 апреля 2019

Ваше решение в порядке. Это распространенная и рекомендуемая практика - разрабатывать код и интерфейсы для тестирования. Я бы немного изменил ваше решение, чтобы избежать дублирования -

func Construct(param string) MyStruct {
    return ConstructWithPath(param, "/default/path")
}

func ConstructWithPath(param, path string) MyStruct {
    return MyStruct {Param: param, Path: path}
}

Вам не нужно экспортировать ConstructWithPath, если вы не хотите, чтобы кто-либо вне этого пакета использовал его.

...