在 Perl 中写入文件时测试错误处理的最简单方法是啥?
Posted
技术标签:
【中文标题】在 Perl 中写入文件时测试错误处理的最简单方法是啥?【英文标题】:What is the easiest way to test error handling when writing to a file in Perl?在 Perl 中写入文件时测试错误处理的最简单方法是什么? 【发布时间】:2019-09-19 12:36:36 【问题描述】:我有一个沼泽标准 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 方法)。
【问题讨论】:
相关:***.com/q/1361518/2404501 与此类似,但更简单:/dev/full
- 就像 /dev/null
用于读取,但在写入时总是失败。
【参考方案1】:
使用错误的文件句柄会使它们都失败
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() 在未打开的文件句柄 10 上... 无法写入:错误的文件描述符在... close() 在未打开的文件句柄 10 上... 错误关闭:错误的文件描述符在...例如,如果您不想看到 perl 的警告,请使用 $SIG__WARN__
捕获它们并将您的消息打印到文件(或 STDOUT
)。
【讨论】:
【参考方案2】:重复 zdim 的回答 ...
写入一个打开读取的文件句柄。
关闭一个已经关闭的文件句柄。
【讨论】:
技术上我喜欢这个答案;但它并没有解决如何测试我在工作程序中拥有的良好、正确代码的问题,它不会做这两件事:) 我认为这个想法是添加到“好、正确”的代码中,作为测试以上是关于在 Perl 中写入文件时测试错误处理的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
将hdf5文件中的uint32数据写入java中的数组的最简单方法是啥?
从 Perl 中的哈希中获取具有最高值的键的最简单方法是啥?