Сколько делает я должен протестировать Американского лося - и MooseX:: FollowPBP-сгенерированные методы?

Я хочу начать строго делать Разработку через тестирование. Однако я задавался вопросом, насколько я должен методы тестирования, сгенерированные Американским лосем и 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');

Это достаточно или слишком много тестирования? (Таким образом, помимо, очевидно, недостающих тестов для regex).

Я думал, что видел веб-страницу или другое сообщение об этом где-нибудь, но я не смог найти его сегодня.

5
задан brian d foy 22 February 2010 в 00:46
поделиться

4 ответа

Перечислите сетевые интерфейсы, вы увидите, что при подключении как к WiFi, так и к 3g имеется 2 с различными локальными IP-адресами. Вы можете использовать один или другой, принудительно привязав сокет к правому интерфейсу перед отправкой данных. Ядро, которое пытается найти наилучший интерфейс для маршрутизации пакета, должно быть удовлетворено вашим выбором. Отказ от ответственности: Я не пробовал это, это всего лишь предложение.

-121--4904445-

В той же папке, где был запущен svn status , выполните следующую команду:

svn info app

Появится URL-адрес, на который указывают метаданные svn папки приложения. Вероятно, вы увидите, что он указывает на другое расположение по сравнению с тем, которое вы ожидаете, основываясь на URL-адресе родительской папки.

Затем можно либо использовать svn switch , чтобы указать каждую коммутируемую папку на правильный URL, либо просто удалить каждую коммутируемую папку с помощью rm -rf , а затем выполнить svn update .

обновить после перечитывания вопроса: Скотт прав, когда говорит, что переключенные папки не должны вызывать ошибок при выполнении svn обновить .

Проблемы с рабочей копией возникают из-за перемещения или переименования папок без использования команды svn mv. Это классическая ошибка новичка SVN; Я участвовал в обучении новых пользователей SVN и видел это множество.

Восстановить рабочую копию после таких ошибочных манипуляций довольно сложно. Лучший способ исправить это, как правило, просто сделать новый оформление заказа. Будущие версии SVN централизуют Subversion 1.7 теперь централизовал метаданные .svn , уменьшая возможность таких ошибок.

-121--2198069-

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

С этой целью я бы начал со следующих тестов:

  • Убедитесь, что атрибуты чтения/записи имеют как метод доступа, так и мутатор.
  • Убедитесь, что атрибуты только для чтения имеют метод доступа и мутатор отсутствует.
  • Проверка ограничений и принуждений любого типа. Убедитесь, что можно задать только допустимые значения. Если атрибут sЕсли ожидается, что VII будет рассматриваться как Str и принудительно преобразован в Int как 7 , проверьте, что он это делает.
1
ответ дан 14 December 2019 в 01:07
поделиться

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

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

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

5
ответ дан 14 December 2019 в 01:07
поделиться

Спасибо, Дэйв, daotoad, Эфир, Эллиот и Брайан. Читая ваши ответы, комментарии и блоги, можно выделить два важных момента:

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

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

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

РЕДАКТИРОВАТЬ:

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

1
ответ дан 14 December 2019 в 01:07
поделиться

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

use Test::Deep;
my @attrs = Neu::Series->meta->get_all_attributes;
cmp_deeply( [ map { $_->name } @attrs ], superbagof(qw(file_regex top_dir access)));
2
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: