Сколько мне нужно для тестирования Moose- и MooseX :: FollowPBP-генерируемых методов? - PullRequest
5 голосов
/ 16 февраля 2010

Я хочу начать строго делать Test-Driven-Development. Однако мне было интересно, сколько я должен тестировать методы, сгенерированные 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 ]

5 голосов
/ 16 февраля 2010

Нет смысла тестировать, что методы доступа были сгенерированы правильно. Если они , а не , вы очень быстро об этом узнаете, потому что любые реальные тесты, которые вы пишете, не пройдут.

Moose сам проверяет, что средства доступа генерируются правильно, что классы, использующие Moose, получают конструктор и так далее. Одним из пунктов использования зависимостей является то, что вы можете сосредоточиться на написании и тестировании своего приложения, а не на вспомогательном коде.

Я согласен с daotoad, вероятно, стоит проверить ограничения и принуждения , которые вы пишете сами .

2 голосов
/ 16 февраля 2010

Проверка того, что все методы доступа были сгенерированы корректно, но есть и другие вещи, которые вы можете проверить на более высоком уровне, например, почему бы не проверить, что атрибуты были сгенерированы правильно?

use Test::Deep;
my @attrs = Neu::Series->meta->get_all_attributes;
cmp_deeply( [ map { $_->name } @attrs ], superbagof(qw(file_regex top_dir access)));
1 голос
/ 17 февраля 2010

Спасибо, Дейв, Даотоад, Эфир, Эллиот и Брайан. Из чтения ваших ответов, комментариев и блогов, кажется, есть два существенных момента:

(1) Никаких испытаний не требуется, чтобы убедиться, что Moose делает то, что должен. Я думаю, что все согласны с этим.

(2) Тестирование Сгенерированные Moose методы подходят для создания, тестирования и обслуживания вашего интерфейса . Большинство согласны с этим.

Еще раз спасибо всем за ваш вклад.

EDIT:

Это просто краткое изложение сообщества. Пожалуйста, прочитайте отдельные ответы и комментарии.

1 голос
/ 16 февраля 2010

Я бы сосредоточился на тестировании своей спецификации. Я сказал Мусу, что хотел, чтобы он делал правильно?

Для этого я бы начал со следующих тестов:

  • Убедитесь, что атрибуты чтения / записи имеют как аксессор, так и мутатор.
  • Убедитесь, что атрибуты только для чтения имеют аксессор и не имеют мутатора.
  • Проверка любых типов ограничений и принуждений. Убедитесь, что можно установить только приемлемые значения. Если атрибут, если вы ожидаете, что VII будет рассматриваться как Str и приведен к Int как 7, проверьте, что он делает.
...