Каковы хорошие платформы для поблочного тестирования и фиктивных объектов в Perl?

Я не думаю, что возможно сделать это с Timer/TimerTask, но в зависимости от того, что точно Вы хотите достигнуть Вас, могло бы быть довольно использованием java.util.concurrent.ScheduledThreadPoolExecutor.

12
задан brian d foy 7 October 2009 в 18:30
поделиться

4 ответа

С точки зрения тестовых сред мне нравится использовать Test :: Class , который позволяет вам настраивать хорошие иерархии модульных тестов аналогично JUnit. Связанная документация дает довольно хороший обзор, хотя, если вы еще не знакомы с соглашениями о тестировании Perl, ознакомьтесь с документацией для Test :: Simple и TAP , который является стандартом. выходной формат для тестов Perl.

Для имитации существует Test :: Mock :: Class , который полезен для настройки фиктивных классов для библиотек, находящихся вне вашего прямого контроля, например модулей CPAN, на которые опирается ваше приложение.

Там также отличный Test :: MockDBI , который предоставляет специальные средства для имитации ваших баз данных.

12
ответ дан 2 December 2019 в 05:15
поделиться

Просто добавлю немного о BDD, потому что ответ friedo, я думаю, охватывает все остальное.

Взгляните на это обсуждение Perlmonks. Behavior Driven Development: рекомендуемые инструменты для Perl ?

Я думаю, что некоторые инструменты могут указать вам правильное направление:

См. Также это SO вопрос: Можете ли вы просмотреть мою переписанную Perl версию Cucumber?

Надеюсь, что часть этого поможет.

/ I3az /

7
ответ дан 2 December 2019 в 05:15
поделиться

В последнее время, с MooseX :: Declare , я использовал «реальные объекты» в качестве имитирующих объектов.

Допустим, у вас есть драйвер базы данных, который выполняет интерфейс вроде этого:

role Database {
    requires 'connect';
    requires 'query';
};

Тогда у вас есть такой код, который использует базу данных:

class FooPage {
    has 'database' => (
        is       => 'ro',
        does     => 'Database',
        required => 1,
    );

    method get_foo() {
        $self->database->query({ foo => 42 });
    }

    method render_page(Str $user) {
        "Hello, $user.  Here is a foo for you: ". $self->get_foo;
    }
};

Теперь вы хотите протестировать это:

use Test::More tests => 2;
use MooseX::Declare;

my $fake_database = class with Database {
    has 'data' => ( is => 'ro', isa => 'HashRef' );
    has 'connected' => ( is => 'rw', isa => 'Bool' );

    method connect() { $self->connected(1) }
    method query(HashRef $query) { $self->data->{$query->{foo}} }
};

my $test_database = $fake_database->name->new(
    data => {
        42 => 'OH HAI',
    },
};

my $foo_page = FooPage->new( database => $test_database );
is $foo_page->get_foo, 'OH HAI', 'got correct foo';
is $foo_page->render_page('jrockway'),
   'Hello, jrockway.  Here is a foo for you: OH HAI',
 'got rendered page';

Обратите внимание, насколько у вас сжатый синтаксис, но вся мощь «настоящего» Класс Moose как ваш фиктивный объект. Удобно и бесконечно гибко.

(Это всего лишь примеры ... это могло быть что-то намного лучше.)

6
ответ дан 2 December 2019 в 05:15
поделиться

Это не фреймворк, но одна из лучших книг по тестированию - отличная Perl Testing: A Developer's Notebook , в которой также есть рекомендации по тестовым фреймворкам для Perl, например Test :: More .

4
ответ дан 2 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

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