问题是,当您使用来运行您的应用程序时,例如
goappserve,当前目录是应用程序根目录(
app.yaml所在的位置)。因此,通常您提供相对于应用程序根目录的路径。
但是,当您使用进行测试时,例如
goapptest当前目录始终是包含正在运行的测试文件的文件夹(
*_test.go)。如果测试文件不在应用程序根目录中(通常不是),则在解析到另一个文件夹(包含测试文件)时,正确解析为应用程序根目录的相对路径将不起作用。
这是您的问题的2个选择:
1.将工作目录更改为应用程序根目录
您可以
os.Chdir()在调用使用相对路径的代码之前将工作目录更改为应用程序的根文件夹。您甚至可以将其放入
init()函数中,或从测试方法中调用它(以适合您的方式)。
假设您的测试文件位于文件夹中
[APP_ROOT]/my/package/some_test.go。您可以这样设置应用程序的根目录(在层次结构中为2级):
if err := os.Chdir("../.."); err != nil { panic(err)}请注意,我会在测试文件的package init函数中添加此行,如下所示:
func init() { if err := os.Chdir("../.."); err != nil { panic(err) }}因为如果您在测试文件中具有多个测试功能,并且多次运行此代码,则结果将不是您想要的(因为我们指定从当前级别升2个级别)。
2.重构代码
如果您要测试使用相对路径的代码,则可以更改/重构代码以使用相对路径的基础,例如从测试可能会更改的变量中获取(知道当前目录是其包含文件夹的位置),以便原始相对路径从测试运行并解析为其他基本路径时,也可以使用。
例如,
""当您的应用正常运行时,此基本路径可能是空字符串(因此,这意味着当前文件夹是本应用的根目录),而在测试运行时,您可以将其设置为应用的根目录(绝对值)路径)或类似
"../.."第2步的操作在目录层次结构中进行升级(因为当前目录是测试文件的包含文件夹)。



