9

编写测试时,文本文件在 test 文件夹中读取,但不在文件夹之外(即,在运行 Prove6 时)。例如,此代码读取测试文件夹内的 ReadConfig.ini,但不在其外部:

my %v = ReadIni( 'ReadConfig.ini' );

另一方面,此代码在 test 文件夹之外工作:

my %v = ReadIni( $*PROGRAM.dirname.IO.add('ReadConfig.ini') );

正确的语法是什么?

谢谢!

4

1 回答 1

9

因此,您的测试包含以下内容:

my %v = ReadIni( 'ReadConfig.ini' );

当您声明相对文件路径时,它将针对$*CWD. 因此,如果您在t/文件夹中运行测试,它将查找t/ReadConfig.ini,如果您在t/../文件夹中运行,它将查找../ReadConfig.ini. 因此,当您编写测试时,您应该使用绝对路径,这样工具就不会被限制在特定位置内运行测试。


my %v = ReadIni( $*PROGRAM.dirname.IO.add('ReadConfig.ini') );

另一方面,如果您提供绝对文件路径,则含义没有差异,无论您在哪个目录中,这都会按您的意思执行。但是我建议不要使用dirname不包含卷部分的内容windows,而是使用父级:

my %v = ReadIni( $*PROGRAM.parent.add('ReadConfig.ini') );
于 2019-04-24T14:03:02.490 回答