代码之家  ›  专栏  ›  技术社区  ›  Christopher Bottoms zerkms

我需要多少来测试驼鹿和驼鹿:遵循PBP生成的方法?

  •  5
  • Christopher Bottoms zerkms  · 技术社区  · 15 年前

    我想开始严格地进行测试驱动开发。然而,我想知道我应该测试多少由驼鹿和驼鹿产生的方法::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');
    

    这是足够的还是太多的测试?(也就是说,除了对regex明显缺失的测试之外)。

    我以为我在某个地方看到了一个网页或其他关于这个的帖子,但我今天找不到。

    4 回复  |  直到 15 年前
        1
  •  1
  •   daotoad    15 年前

    我将重点测试我的规范。我有没有告诉驼鹿我想要它做什么?

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

    • 验证读/写属性同时具有访问器和赋值函数。
    • 验证只读属性是否具有访问器,并且没有赋值函数。
    • 测试任何类型约束和强制。确认只能设置可接受的值。如果你期望的属性是sif VII 被看作是一个 Str 被强迫进入 Int 作为 7 ,进行测试。
        2
  •  5
  •   Dave Rolsky    15 年前

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

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

    我同意道蟾蜍的观点,它可能值得测试约束和强制 你自己写的 .

        3
  •  2
  •   Ether    15 年前

    正在检查是否正确生成了所有访问器…但是,还有其他一些东西可以在稍微高一点的级别上进行测试,例如,为什么不测试属性是否正确生成?

    use Test::Deep;
    my @attrs = Neu::Series->meta->get_all_attributes;
    cmp_deeply( [ map { $_->name } @attrs ], superbagof(qw(file_regex top_dir access)));
    
        4
  •  1
  •   bernardn    15 年前

    谢谢你,戴夫,道蟾,以太,艾略特和布莱恩。从阅读你的答案、评论和博客来看,有两个突出点:

    (1)无需测试以确保驼鹿做它应该做的。我认为每个人都同意这一点。

    (2)测试驼鹿生成的方法适用于建立、测试和维护您的 界面 . 大多数人都同意这一点。

    再次感谢大家的意见。

    编辑:

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