5

いくつかのケースを実行するために必要なバイナリ ファイルがいくつか_testあります。

現在、これらのファイルへの相対パスはテストにハードコードされていますが、フォルダー階層の何かを変更してテストを脆弱にするとテストが壊れるため、私は好きではありません。

これを処理するための推奨されるベスト プラクティスと、一般的なリソース ファイルはありますか?

4

1 に答える 1

5

テスト リソース名はハード コーディングできますが、パスはハード コーディングする必要はありません。

(09:13) jnml@fsc-r550:~/src/tmp/SO/13854048$ ls -a
.  ..  a_test.go
(09:13) jnml@fsc-r550:~/src/tmp/SO/13854048$ cat a_test.go 
package foo

import (
        "testing"
        "io/ioutil"
)

func Test(t *testing.T) {
        b, err := ioutil.ReadFile("foo")
        if err != nil {
                t.Fatal(err)
        }

        t.Logf("resource content is: %s", b)
}
(09:13) jnml@fsc-r550:~/src/tmp/SO/13854048$ go test -v
=== RUN Test
--- FAIL: Test (0.00 seconds)
a_test.go:11:         open foo: no such file or directory
FAIL
exit status 1
FAIL        tmp/SO/13854048        0.005s
(09:14) jnml@fsc-r550:~/src/tmp/SO/13854048$

そのようなリソースは (まだ) ありません。作成しましょう。

(09:14) jnml@fsc-r550:~/src/tmp/SO/13854048$ echo blah > foo
(09:14) jnml@fsc-r550:~/src/tmp/SO/13854048$ go test -v
=== RUN Test
--- PASS: Test (0.00 seconds)
a_test.go:14:         resource content is: blah
PASS
ok          tmp/SO/13854048        0.007s
(09:14) jnml@fsc-r550:~/src/tmp/SO/13854048$ cd
(09:14) jnml@fsc-r550:~$ go test -v tmp/SO/13854048
=== RUN Test
--- PASS: Test (0.00 seconds)
a_test.go:14:         resource content is: blah
PASS
ok          tmp/SO/13854048        0.005s
(09:14) jnml@fsc-r550:~$ 

(上記の最後の実行で) cwd がgo test他の場所から呼び出された場合でも正しいことに注意してください。

于 2012-12-13T08:22:40.147 に答える