74

ディレクトリ構造は次のとおりです。

src
src/pkg
src/pkg/t1.go
src/pkg/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()
}

dir のコマンドラインから go test を呼び出しますsrc/pkg

go test t1_test.go


エラー:

./t1_test.go:8: undefined: SayHI
FAIL    command-line-arguments [build failed]

しかし、機能はそこにあります

ヒントをありがとう

4

4 に答える 4

73

意図したとおりに動作しています。

jnml@fsc-r630:~/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.
jnml@fsc-r630:~/src/pkg$ 

言い換えると:

  • go test大丈夫だ。
  • go test pkg($GOPATH が ~ で、パッケージが ~/src/pkg にあると仮定して) 問題ありません。
  • go test whatever_test.go上記のようにサポートされていないため、問題ありません。

実行するテストを選択するには、-run <regular_expression>フラグを使用します ( は、 の<regular_expression>ように両端にワイルドカードがあると解釈されます.*<regular_expression>.*)。例えば

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

また

$ go test -run Say my/package/import/path # from anywhere
于 2013-02-06T07:22:27.727 に答える
22

これは Golang ではやや奇妙です。正直なところ、解決策を見つけるのに時間がかかりました。

簡単な回避策は、コマンドにそれらを含めることです。次に例を示します。 go test src/pkg/t1.go src/pkg/t1_test.go

私見、最善の方法はそれをきれいに保つことです。そのため、テスト ファイルごとに複数のファイルを依存関係として持つことは避けてください。+1 ファイルを依存関係として使用している場合は、_testパッケージを使用してブラック ボックス テストを作成し、小文字の内部変数を使用しないことを検討してください。

これにより、日々のテストで複雑な依存関係に対処する必要がなくなります。

于 2018-03-04T18:35:12.330 に答える