Как проверить основные функции пакета в golang?
Я хочу протестировать несколько функций, которые включены в мой основной пакет, но мои тесты, похоже, не могут получить доступ к этим функциям.
Мой образец файла main.go выглядит так:
package main
import (
"log"
)
func main() {
log.Printf(foo())
}
func foo() string {
return "Foo"
}
и мой файл main_test.go выглядит так:
package main
import (
"testing"
)
func Foo(t testing.T) {
t.Error(foo())
}
когда я запускаю go test main_test.go
, я получаю
# command-line-arguments
.\main_test.go:8: undefined: foo
FAIL command-line-arguments [build failed]
Как я понимаю, даже если я переместил тестовый файл в другое место и попытался импортировать его из файла main.go, я не смог его импортировать, так как он package main
.
Каков правильный способ структурирования таких тестов? Должен ли я просто удалить все из пакета main
asides простой основной функции для запуска всего, а затем проверить функции в своем собственном пакете или есть ли способ для вызова этих функций из основного файла во время тестирования?
Ответы
Ответ 1
когда вы указываете файлы в командной строке, вы должны указать все из них
Здесь мой запуск:
$ ls
main.go main_test.go
$ go test *.go
ok command-line-arguments 0.003s
Заметьте, что в моей версии я запускал с main.go и main_test.go в командной строке
Кроме того, ваш файл _test не совсем прав, вам нужно, чтобы ваша тестовая функция называлась TestXXX и указала на test.T
Здесь измененная версия:
package main
import (
"testing"
)
func TestFoo(t *testing.T) {
t.Error(foo())
}
и измененный вывод:
$ go test *.go
--- FAIL: TestFoo (0.00s)
main_test.go:8: Foo
FAIL
FAIL command-line-arguments 0.003s
Ответ 2
Единичные тесты идут только до сих пор. В какой-то момент вы должны запустить программу. Затем вы проверяете, что он работает с реальным входом, из реальных источников, обеспечивая реальный выход в реальные места. Для реального.
Если вы хотите unit test вещь переместить его из main().
Ответ 3
Измените имя пакета с основного на foobar в обоих источниках.
Переместите исходные файлы в src/foobar.
mkdir -p src/foobar
mv main.go main_test.go src/foobar/
Обязательно установите GOPATH в папку, в которой находится src/foobar.
export GOPATH=`pwd -P`
Протестируйте его с помощью
go test foobar