我在使用 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。
- 1 回答
- 0 关注
- 83 浏览
添加回答
举报
0/150
提交
取消