Как структурировать импорт в тестовых файлах Golang - PullRequest
0 голосов
/ 01 октября 2018

У меня есть функции, определенные в main.go, которые недоступны в main_test.go.Тем не менее, в некоторых онлайн-учебниках я вижу, что функции доступны: я хотел бы понять разницу, а также понять, как их структурировать идиоматическим способом.

В частности, у меня есть приложение с несколькимидвоичные файлы:

myapp/cmd/app/main.go
myapp/cmd/cli/main.go

В настоящее время у меня много простых логик модульного тестирования, которые я запускаю в func main файлах main.go.Я просто тестирую отдельные функции и заставляю их печатать свои выходные данные, я не пытаюсь задействовать всю мощь «тестирующего» набора, если я могу этого избежать.

Поскольку мои тесты находятся в верхней частимой main.go на данный момент слишком длинный, я хотел бы переместить их в определенные тестовые файлы, например:

myapp/cmd/app/main_test.go
myapp/cmd/cli/main_test.go

Это достаточно хорошо работает с моим make-файлом:

# Makefile

all: test build
build:
    go build -o cmd/app/main cmd/app/main.go
    go build -o cmd/cli/main cmd/cli/main.go
test:
    go test ./cmd/app/main_test.go
    go test ./cmd/cli/main_test.go

Если я просто хочу запустить свои тестовые файлы, я бы хотел взять элемент в моем app/main.go

// cmd/app/main.go
package main

func definedInMain(m string) string {
  // 
}

func main() {
  m := definedInMain("1")
  fmt.Println(m)
  // all the rest of my app's logic...
}

и запустить его в моем main_test.go

// cmd/app/main_test.go

package main

// no imports, I hope?

func testDefinedInMain() {
  m := definedInMain("1")
  fmt.Println(m)  
}

Тем не менее, это не с:

undefined: definedInMain
FAIL

Я запутался, что мне нужно импортировать все эти функции в мои main_test.go файлы (и даже когда я пытаюсь, он предлагает "can't load package: ... myapp/cmd/app/main" in any of: ...")

Существует ли простой и понятный способ для меня тестировать мои очень простые модульные тесты в тестовых файлах и выполнять свои функции в основных файлах без большого количества переписывания импорта или другой существенной реорганизации?

По некоторым ссылкам у меня сложилось впечатление, что если я сделаю main_test.go, то импорт будет следовать сам по себе (как в этих примерах).

Итак, вы можете увидеть, что я немного запутался, обучающие программы получают свои функции, импортируемые бесплатно, и я делаюнет, и я просто хочу лучше понять магию.

Это просто случай, когда моя функция, определенная в InMain, является закрытой, потому что она в нижнем регистре?Я действительно хочу, чтобы эта функция была закрытой, но я ожидаю, что она будет экспортирована в файл main_test.go так же, как ее можно использовать в main.go.Должен ли я сделать его полностью публичным, чтобы иметь тесты в другом файле?Это не кажется правильным, например, «можно ли протестировать общедоступные методы в go?»

1 Ответ

0 голосов
/ 03 октября 2018

Если @Mustafa Simav хочет опубликовать этот ответ, я приму, но если нет, то закрою это:

Решением было использование нелокального импорта с полным путем ниже $GOPATH,What_test.go правильно выполняет автоматический импорт, даже неэкспортированных строчных функций, и это именно то, что я хотел для модульного тестирования.Это было трудно увидеть из-за импорта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...