在编写测试时,文本文件会在测试文件夹中读取,但不会在文件夹外部读取(即,在运行prove6时)。例如,此代码在测试文件夹中读取ReadConfig.ini,但不在其外部:
my %v = ReadIni( 'ReadConfig.ini' );
另一方面,此代码在测试文件夹之外工作:
my %v = ReadIni( $*PROGRAM.dirname.IO.add('ReadConfig.ini') );
正确的语法是什么?
谢谢!
所以你的测试包含类似的东西:
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') );