我想严格开始测试驱动开发。但是,我想知道我应该测试多少Moose和MooseX :: FollowPBP生成的方法。例如,我有以下类:
package Neu::Series;
use Moose;
use MooseX::FollowPBP;
use File::Find::Wanted;
has 'file_regex' => (
isa=>'RegexpRef',
is=>'rw',
default => sub{
qr{
[A-Z] #Uppercase letter
[a-zA-Z]* #any letter, any number of times
[-] #dash
( #open capturing parenthesis
[0-9]
[0-9]
[0-9]
[0-9]
[a-zA-Z]? #any letter, optional
) #close capturing parenthesis
}xms;
},
);
has 'top_dir' => (
isa=>'Str',
is=>'rw',
);
has 'access' =>(
isa=>'Neu::Access',
is=>'ro',
required=>1,
);
1;
我目前的测试脚本是:
use strict;
use warnings;
use Test::More tests => 8;
use Neu::Access;
BEGIN{ use_ok('Neu::Series'); }
can_ok( 'Neu::Series', 'new');
can_ok( 'Neu::Series', 'set_file_regex');
can_ok( 'Neu::Series', 'get_file_regex');
can_ok( 'Neu::Series', 'set_top_dir');
can_ok( 'Neu::Series', 'get_top_dir');
can_ok( 'Neu::Series', 'get_access');
my $access = Neu::Access->new(dsn => 'test');
my $series_worker = Neu::Series->new(access => $access);
isa_ok($series_worker, 'Neu::Series');
这是足够的还是太多的测试? (也就是说,除了明显缺少正则表达式的测试之外)。
我以为我在某个地方看过一个网页或其他帖子,但我今天找不到它。
答案 0 :(得分:5)
测试访问器是否正确生成毫无意义。如果他们不,你会很快发现,因为你写的任何真正的测试都会失败。
Moose本身测试正确生成访问器,使用Moose的类获取构造函数,依此类推。使用依赖项的一个要点是,您可以专注于编写和测试应用程序,而不是帮助程序代码。
我同意daotoad,它可能值得测试你自己编写的约束和强制。
答案 1 :(得分:2)
检查是否正确生成了所有访问者是正确的...但是还有其他一些东西可以在稍高的级别进行测试,例如为什么不测试属性是否正确生成?
use Test::Deep;
my @attrs = Neu::Series->meta->get_all_attributes;
cmp_deeply( [ map { $_->name } @attrs ], superbagof(qw(file_regex top_dir access)));
答案 2 :(得分:1)
我专注于测试我的规范。我告诉Moose我想要它做的正确吗?
为此,我将从以下测试开始:
VII
视为Str
,并将Int
强制转换为7
,请对其进行测试。答案 3 :(得分:1)
谢谢Dave,daotoad,Ether,Elliot和brian。从阅读您的答案,评论和博客,似乎有两个重点:
(1)不需要进行测试以确保Moose能够完成它应该做的事情。我想每个人都同意这一点。
(2)测试Moose生成的方法适用于建立,测试和维护接口。大多数人都同意这一点。
再次感谢大家的意见。
编辑:
这只是一个社区维基摘要。请阅读个人答案和评论。