gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:00:31 26 4
gpt4 key购买 nike

我在使用 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 加载和保存,这不是我想要的。我试图将我的 launch.json 更改为实际使用 ${workspace} 作为程序并使用“./test”作为参数,但这使得测试完全停止工作。现在我迷路了。我有什么想法可以解决这个问题吗?

最佳答案

与其让测试直接写入磁盘上的文件(此模型可能存在并发问题),不如在文件系统之上使用一个抽象层(不是 ioutil)。

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

关于go - 如何使 Go 测试与文件系统一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57294130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com