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

如何使 Go 测试与文件系统一起工作

如何使 Go 测试与文件系统一起工作

Go
互换的青春 2023-07-10 14:27:42
我在使用 VsCode 测试 Go 应用程序时遇到一些问题。这是我的 launch.json{  "name": "Test",  "type": "go",  "request": "launch",  "mode": "test",  "program": "${workspaceFolder}/test",  "env": {},  "args": []}现在我遇到的问题是我的应用程序应该在子文件夹中写入文件(atm 是 ./temp)。为此,我有两个函数,第一个是确定文件路径func getFilePath() string {    dir, err := filepath.Abs(filepath.Dir(os.Args[0]))    if err != nil {        panic(err)    }    return dir + "/temp/ocicd-config.yaml"}另一个用于保存文件func SaveToYaml(Config Structs.Project) {    fmt.Println("Saving Config")    yaml, err := yaml.Marshal(Config)    if err != nil {        panic(err)    }    fmt.Println(string(yaml))    ioutil.WriteFile(getFilePath(), yaml, 0644)}以及加载文件func Load() Structs.Project {    fmt.Println("Loading Config")    file, err := ioutil.ReadFile(getFilePath())    if err != nil {        panic(err)    }    project := Structs.Project{}    err = yaml.Unmarshal(file, &project)    if err != nil {        panic(err)    }    return project}现在的问题是,VsCode 使应用程序在 ./test 子文件夹中运行,这使我的应用程序尝试从 ./test/temp 加载并保存到 ./test/temp,这不是我想要的。我尝试更改我的 launch.json 以实际使用 ${workspace} 作为程序并使用“./test”作为参数,但这会使测试完全停止工作。现在我很迷失。我有什么想法可以解决这个问题吗?
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您应该在文件系统之上使用一个抽象层(而不是),而不是让测试直接写入磁盘上的文件(此模型可能会出现并发问题)ioutil

github.com/spf13/afero是一个用于此目的的很棒的库。对于您的测试用例,您可以简单地传递 MemFs 层而不是 OsF。


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

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