首页 > 解决方案 > 解决非主包中的相对路径的问题

问题描述

我在 Go 应用程序中解析相对文件路径时遇到问题。对于这个应用程序,我决定制作一个包,为不同的配置文件提供统一的接口。该conf包包含相关的数据文件,所以这基本上是文件树:

app/conf
    + config.go
    + config.json
    + ...
app/code
    + code.go
    + code_test.go

问题是,当 中定义的测试app/code/code_test.go调用app/conf包中的函数时,该函数又尝试打开app/conf/config.json,由于工作目录位于 ,因此相对路径被弄乱了app/code

标签: gorelative-path

解决方案


依赖源中的配置文件路径不仅是单元测试中的问题,而且在生产中也是一个问题。通常,代码会执行以下操作:

  • 配置处理程序接受io.Reader它将从中读取配置的一个。
  • main将打开一个文件(其路径可能是硬编码的,通过命令行传递,通过 env var 传递等)并将其传递给配置处理程序以供读取。
  • 配置处理程序的单元测试将改为将配置(或多个配置,以测试不同的场景)硬编码为类似的东西bytes.Buffer并将其传递给配置处理程序以读取。
  • 除了读取配置文件的代码之外的任何内容的单元测试(因此,任何使用配置但不操纵它的东西)将Config在代码中生成结构,而不是从真实假文件中读取它,作为测试的一部分马具。例如,myConf := config.Config{SomeProp: "foo", OtherProp: true}然后将其传递给被测函数。

推荐阅读