在Perl中写入文件时测试错误处理的最简单方法是什么?

时间:2019-04-30 19:56:02

标签: perl testing integration-testing die

我有一个沼泽标准的Perl文件编写代码,具有(希望)适当的错误处理,类型为:

open(my $fh, ">", "$filename") or die "Could not open file $filname for writing: $!\n";
# Some code to get data to write
print $fh $data  or die "Could not write to file $filname: $!\n";
close $fh  or die "Could not close file $filname afterwriting: $!\n";
# No I can't use File::Slurp, sorry.

(我只是从内存中编写此代码,请避免任何拼写错误或错误)

在第一行“ die”行中测试错误处理有些容易(例如,创建一个与您打算写入的名称相同的不可写文件)。

如何在第二行(打印)和第三行(关闭)“ die”行中测试错误处理?

我知道在关闭时引发错误的唯一方法是在写入时文件系统上的空间不足,这很难作为测试。

我更喜欢集成测试类型解决方案,而不是单元测试类型(这将涉及在Perl中模拟IO方法)。

2 个答案:

答案 0 :(得分:4)

使用错误的文件句柄会使它们都失败

use warnings;
use strict;
use feature 'say';

my $file = shift || die "Usage: $0 out-filename\n";

open my $fh, '>', $file  or die "Can't open $file: $!";

$fh = \*10;

say $fh 'writes ok, ', scalar(localtime)  or warn "Can't write: $!";

close $fh or warn "Error closing: $!";

打印

say() on unopened filehandle 10 at ...
Can't write: Bad file descriptor at ...
close() on unopened filehandle 10 at ...
Error closing: Bad file descriptor at ...

例如,如果您不想看到perl的警告,请使用$SIG{__WARN__}将其捕获,然后将消息打印到文件(或STDOUT)中。

答案 1 :(得分:0)

嘲笑zdim的答案...

写入打开的文件句柄以供读取。

关闭已关闭的文件句柄。