为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的资源文件

Go中的资源文件

Go
饮歌长啸 2021-05-12 21:27:54
我有一些运行某些_test情况所需的二进制文件。目前,这些文件的相对路径已硬编码到测试中,我不喜欢这样做,因为如果更改文件夹层次结构中的任何内容并使测试易碎,则测试会中断。是否有首选的最佳做法来处理此问题,并且一般来说是资源文件?
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

测试资源名称可能是硬编码的,但路径不一定必须如此。


(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:~$ 

请注意(在上面的最后一次运行中),即使go test从其他位置调用了cwd,它也是正确的。


查看完整回答
反对 回复 2021-05-24
  • 1 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信