我需要多少测试Moose-和MooseX :: FollowPBP生成的方法?

时间:2010-02-15 22:46:31

标签: perl testing tdd moose

我想严格开始测试驱动开发。但是,我想知道我应该测试多少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');

这是足够的还是太多的测试? (也就是说,除了明显缺少正则表达式的测试之外)。

我以为我在某个地方看过一个网页或其他帖子,但我今天找不到它。

4 个答案:

答案 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生成的方法适用于建立,测试和维护接口。大多数人都同意这一点。

再次感谢大家的意见。

编辑:

这只是一个社区维基摘要。请阅读个人答案和评论。