猿问

Go中的资源文件

我有一些运行某些_test情况所需的二进制文件。

目前,这些文件的相对路径已硬编码到测试中,我不喜欢这样做,因为如果更改文件夹层次结构中的任何内容并使测试易碎,则测试会中断。

是否有首选的最佳做法来处理此问题,并且一般来说是资源文件?


饮歌长啸
浏览 240回答 1
1回答

30秒到达战场

测试资源名称可能是硬编码的,但路径不一定必须如此。(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 fooimport (        "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 directoryFAILexit status 1FAIL        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: blahPASSok          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: blahPASSok          tmp/SO/13854048        0.005s(09:14) jnml@fsc-r550:~$ 请注意(在上面的最后一次运行中),即使go test从其他位置调用了cwd,它也是正确的。
随时随地看视频慕课网APP

相关分类

Go
我要回答