登录
首页 >  Golang >  Go问答

使 Go 测试与文件系统配合使用的方法

来源:stackoverflow

时间:2024-03-07 14:00:27 326浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《使 Go 测试与文件系统配合使用的方法》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我在使用 vscode 测试 go 应用程序时遇到一些问题。这是我的 launch.json

351937186​​427

现在我遇到的问题是我的应用程序应该在子文件夹中写入文件(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”作为参数,但这会使测试完全停止工作。现在我很迷失。我有什么想法可以解决这个问题吗?


解决方案


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

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

理论要掌握,实操不能落!以上关于《使 Go 测试与文件系统配合使用的方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>