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

如何从代码和测试中引用相关文件

如何从代码和测试中引用相关文件

Go
POPMUISE 2021-10-18 14:23:51
我需要参考patients.json的patients.go,这里的文件夹结构:如果我做:filepath.Abs("../../conf/patients.json")它适用go test ./...但失败revel run如果我做:filepath.Abs("conf/patients.json")正好相反(狂欢很好,但测试失败)。有没有办法正确引用文件,以便它既适用于测试又适用于正常的程序运行?
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

相对路径总是被解释/解析为基本路径:当前工作目录 - 因此它总是有其局限性。

如果您可以始终注意正确的工作目录,则可以继续使用相对路径。

我的建议是不要依赖工作目录,而是明确指定的基本路径。这可能在您的应用程序中具有硬编码的默认值(也可能是工作目录),您应该提供多种方法来覆盖其值。

覆盖“相对”路径所针对的基本路径的推荐方法:

  1. 命令行标志(见flag包)

  2. 环境变量(参见os.Getenv()

  3. (修复命名)用户主目录中的配置文件(参见os/user/Useros/user/Current()

一旦有了基本路径,就可以通过加入基本路径和相对路径来获得完整路径。您可以使用path.Join()filepath.Join(),例如:

// Get base path, from any or from the combination of the above mentioned solutions

base := "/var/myapp"


// Relative path, resource to read/write from:

relf := "conf/patients.json"


// Full path that identifies the resource:

full := filepath.Join(base, relf) // full will be "/var/myapp/conf/patients.json"


查看完整回答
反对 回复 2021-10-18
?
哔哔one

TA贡献1854条经验 获得超8个赞

这不是路径的问题,而是你的设计问题。

你应该更仔细地设计你的代码。

据我所知,您在测试文件中共享相同的路径并显示运行。我想也许您json在模型包中对路径进行了硬编码,但不建议这样做。

更好的方法是

  • 模型包从全局配置中获取 json 路径,或使用model := NewModel(config_path). 因此,reveal run 可以使用您想要的任何 json 初始化模型。

  • ../../conf/patients.json在你的 xxxx_testing.go 中硬编码“ ”


查看完整回答
反对 回复 2021-10-18
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

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