cjm*_*cjm 9 error-handling perl unit-testing localization internationalization
在我的模块中,我有这个代码:
croak("unable to parse file: $!");
Run Code Online (Sandbox Code Playgroud)
然后,在我的测试中,我想检查当我尝试解析不存在的文件时,我得到了正确的错误消息:
like(
exception { HTML::Tree->new_from_file( "t/non_existent.html" ) },
qr!^unable to parse file: No such file !,
"opening missing file failed"
);
Run Code Online (Sandbox Code Playgroud)
只要测试在英语语言环境中运行,这样就可以正常工作.但是,如果您在德语区域设置中运行测试,则会返回错误消息unable to parse file: Datei oder Verzeichnis nicht gefunden并且测试失败.其他语言环境也存在类似问题.
我不敢相信这是第一次出现,但我找不到CPAN上解决这个问题的任何模块.人们根本就不测试$!错误信息的一部分吗?有没有比改变测试只检查更好的解决方案qr!^unable to parse file: !?
注意:这是HTML-Tree中的RT#77823.
您可以使用%!象征性地测试错误
unless (open my $fh, "<", "/does/not/exist") {
die "$0: unexpected errno " . ($! + 0)
unless $!{ENOENT};
}
Run Code Online (Sandbox Code Playgroud)