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

Chr*_*oms 5 testing tdd perl 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;
Run Code Online (Sandbox Code Playgroud)

我目前的测试脚本是:

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');
Run Code Online (Sandbox Code Playgroud)

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

我以为我在某个地方看过一个网页或其他关于此的帖子,但我今天无法找到它.

Dav*_*sky 5

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

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

我同意daotoad,它可能值得测试你自己写的约束和强制.

  • 我写了一篇关于这个主题的[博客文章](http://blog.urth.org/2010/02/the-purpose-of-automated-tests.html). (2认同)
  • 您没有正确测试Moose生成的访问器.您正在测试您是否与外界保持相同的界面.仅仅因为一个方法目前作为Moose访问器实现并不意味着它将永远以这种方式继续实现.http://elliotlovesperl.com/2010/02/16/test-moose-accessors-hell-yes/ (2认同)
  • 始终测试您的整个界面,而无需关心谁创建它.由于Elliot和daotoad已经概述的所有原因,我在这一点上暴力地不同意Dave. (2认同)

dao*_*oad 1

我会专注于测试我的规格。我是否正确地告诉了 Moose 我希望它做什么?

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

  • 验证读/写属性是否同时具有访问器和修改器。
  • 验证只读属性是否有访问器且没有修改器。
  • 测试任何类型约束和强制。验证是否只能设置可接受的值。如果您希望将属性 sIfVII视为 aStr并强制转换为Intas 7,请测试它是否确实如此。