Подтвердить что ты не робот

Go test не может найти функцию в одном пакете

Структура каталогов:

ЦСИ SRC/упак SRC/упак/t1.go SRC/упак/t1_test.go

t1.go

package pkg

import (
"fmt"
)

func SayHI(){
    fmt.Println("this is t1")
}

t1_test.go

package pkg

import (
    "testing"
)

func TestXYZ(t *testing.T) {
    SayHI()
}

Вызвать тест go из командной строки в каталоге dir src/pkg

go test t1_test.go

ошибка: . /t 1_test.go:8: undefined: SayHI FAIL command-line-arguments [build failed]

но функция есть

спасибо за любые подсказки

4b9b3361

Ответ 1

Он работает по назначению.

[email protected]:~/src/pkg$ go help test
usage: go test [-c] [-i] [build flags] [packages] [flags for test binary]

'Go test' automates testing the packages named by the import paths.
It prints a summary of the test results in the format:

    ok   archive/tar   0.011s
    FAIL archive/zip   0.022s
    ok   compress/gzip 0.033s
    ...

followed by detailed output for each failed package.

'Go test' recompiles each package along with any files with names matching
the file pattern "*_test.go".  These additional files can contain test functions,
benchmark functions, and example functions.  See 'go help testfunc' for more.

By default, go test needs no arguments.  It compiles and tests the package
with source in the current directory, including tests, and runs the tests.

The package is built in a temporary directory so it does not interfere with the
non-test installation.

In addition to the build flags, the flags handled by 'go test' itself are:

    -c  Compile the test binary to pkg.test but do not run it.

    -i
        Install packages that are dependencies of the test.
        Do not run the test.

The test binary also accepts flags that control execution of the test; these
flags are also accessible by 'go test'.  See 'go help testflag' for details.

For more about build flags, see 'go help build'.
For more about specifying packages, see 'go help packages'.

See also: go build, go vet.
[email protected]:~/src/pkg$ 

IOW:

  • go test в порядке.
  • go test pkg (предполагая, что $GOPATH ~, а пакет находится в ~/src/pkg) в порядке.
  • go test whatever_test.go не подходит, поскольку это не поддерживается, как описано выше.

Чтобы выбрать, какие тесты для запуска используют флаг -run RE (RE - это регулярное выражение, интерпретируемое как *RE*). Например

$ go test -run Say # from within the package directory

или

$ go test -run Say my/package/import/path # from anywhere

Ответ 2

Это несколько странно на Голанге. Если честно, мне потребовалось некоторое время, чтобы найти выход.

Простой обходной путь - включить их в команду, например: go test src/pkg/t1.go src/pkg/t1_test.go

ИМХО, лучший способ сохранить его в чистоте. Поэтому избегайте использования более 1 файла в качестве зависимости для каждого тестового файла. Если вы используете файл +1 в качестве зависимости, рассмотрите возможность создания теста черного ящика с пакетом _test и не используйте какие-либо внутренние переменные lowerCase.

Это избавит вас от необходимости иметь дело со сложными зависимостями при ежедневном тестировании.

Ответ 3

я изменяю имя файла go с

first-test.go

в

first_test.go

это работает, желаю помочь ~