Geo*_*Geo 1 testing perl unit-testing
我正在编写一个具有处理文本文件的函数的模块.我是新手测试,所以我决定一起去Test::More.这是我的测试文件现在的样子:
use mymod;
use 5.10.0;
use strict;
use warnings;
use Test::More 'no_plan';
my $file_name = "test.file";
sub set_up {
my $self = shift;
open(my $handle,">",$file_name) or die "could not create file test.file $!\n";
# generate a sample text file here
close($handle);
}
sub tear_down {
my $self = shift;
unlink($file_name) or die "could not delete $file_name $!\n";
}
set_up();
open(my $handle,$file_name) || die "could not open $file_name $!\n";
my @lines = mymod->perform($handle);
is_deeply(\@lines,["expected line","another expected line"]);
close($handle);
tear_down();
Run Code Online (Sandbox Code Playgroud)
这是进行测试的好方法吗?在我的测试中处理生成样本输入文件是否可以?
顺便说一下,我开始把它写成Test::Unit测试,然后切换到Test::More.这就是为什么set_up和tear_down功能都存在的原因.
您可以将字符串"打开"为文件句柄,因此您仍然可以为文件句柄提供方法,但不必创建物理文件.这样您就可以将测试内容放在一个字符串中(理想情况下是一个字符串数组,每个数据样本一个用于测试),而不必创建临时文件:
my @testdata = (
"test data 1",
"test data 2",
# ...
);
foreach my $data (@testdata)
{
open my $datahandle, "<", \$data or die "Cannot open handle to string: $!";
my @lines = mymod->perform($datahandle);
# ...
}
Run Code Online (Sandbox Code Playgroud)
使用Test :: More的'no_plan'选项使测试不太可靠:你不能真正知道你是否因某种原因错过了测试.最好计划预定义数量的测试,或者如果不可能,则可以使用done_testing函数(但需要最新版本的Test :: More).
ETA:我没有看到你使用open-close-open-close-unlink的事情.我认为你可以更好地打开一个临时文件,填写它并将其用于你的测试.
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |