5

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

4 回答 4

5

测试访问器是否正确生成确实没有意义。如果不是,您会很快发现,因为您编写的任何真实测试都会失败。

Moose 自己测试访问器是否正确生成,使用 Moose 的类是否获得构造函数,等等。使用依赖项的要点之一是让您可以专注于编写和测试您的应用程序,而不是帮助代码。

我确实同意 daotoad,可能值得测试您自己编写的约束和强制。

于 2010-02-16T03:53:03.020 回答
2

检查所有访问器是否正确生成是好的……但是您可以在稍高的级别上测试其他内容,例如,为什么不测试属性是否正确生成?

use Test::Deep;
my @attrs = Neu::Series->meta->get_all_attributes;
cmp_deeply( [ map { $_->name } @attrs ], superbagof(qw(file_regex top_dir access)));
于 2010-02-15T23:20:46.037 回答
1

我会专注于测试我的规范。我有没有告诉 Moose 我想让它正确地做什么?

为此,我将从以下测试开始:

  • 验证读/写属性是否同时具有访问器和修改器。
  • 验证只读属性是否有访问器且没有修改器。
  • 测试任何类型约束和强制。确认只能设置可接受的值。如果属性 sIf 您希望VII被视为 aStr并被强制转换为Intas 7,请测试它是否存在。
于 2010-02-16T01:19:49.003 回答
1

谢谢 Dave、daotoad、Ether、Elliot 和 brian。通过阅读您的答案、评论和博客,似乎有两个要点:

(1) 无需进行任何测试来确保 Moose 完成了它应该做的事情。我想每个人都同意这一点。

(2) 测试 Moose 生成的方法适用于建立、测试和维护您的接口。大多数人都同意这一点。

再次感谢大家的意见。

编辑:

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

于 2010-02-17T13:45:40.643 回答