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