在我的模块中,我有这段代码:
croak("unable to parse file: $!");
然后,在我的测试中,当我尝试解析不存在的文件时,我想检查是否收到正确的错误消息:
like(
exception { HTML::Tree->new_from_file( "t/non_existent.html" ) },
qr!^unable to parse file: No such file !,
"opening missing file failed"
);
只要测试在英语语言环境中运行,这样就可以了。但是,如果您在德语区域设置中运行测试,则错误消息将返回unable to parse file: Datei oder Verzeichnis nicht gefunden
并且测试失败。其他语言环境也存在类似问题。
我无法相信这是第一次出现,但我找不到任何解决此问题的CPAN模块。人们根本不会测试错误消息的$!
部分吗?有没有比将测试更改为仅检查qr!^unable to parse file: !
?
注意:这是RT#77823 in HTML-Tree。
答案 0 :(得分:5)
是否有比将测试更改为仅检查更好的解决方案 qr!^无法解析文件:!?
$!
是一个双变量,即它有字符串和数字值。您可以使用错误消息中的数值。
答案 1 :(得分:5)
您可以使用%!
象征性地测试错误,如
unless (open my $fh, "<", "/does/not/exist") {
die "$0: unexpected errno " . ($! + 0)
unless $!{ENOENT};
}
答案 2 :(得分:1)
答案 3 :(得分:1)
我解决这个问题的方法是放
BEGIN { $ENV{LANG} = $ENV{LC_MESSAGES} = $ENV{LC_ALL} = "C" }
在涉及此类测试的任何单元测试脚本中。这样,在该测试期间,语言环境设置为C,并且消息将可靠地进入普通C语言环境,而不是本地化。