Модуль Perl, тестирующий глубокие структуры - PullRequest
2 голосов
/ 08 февраля 2011

TMTOWTDI, ну, я уверен, что на это надеюсь - я использую Test :: Deep для моих последних нескольких проектов, когда сталкиваюсь с многомерными хэшами (иногда 4-5 уровней).Прямо сейчас моя обычная практика - просто набирать эти хэши и заполнять мои ожидаемые данные, а затем запускать cmp_deeply(actual, expected, msg).Кто-нибудь есть какие-либо советы по модульному тестированию глубоко вложенных данных, как это?- мой нынешний метод кажется крайне неэффективным, иногда он занимает более часа на единичный тест структуры данных.

Ответы [ 4 ]

4 голосов
/ 08 февраля 2011

Я использую Test :: More и is_deeply, как следующий комментатор.Я также несколько автоматизировал сравнение, имея каталог / sample /, в котором я храню ожидаемые значения, выполняя тесты вручную и используя Data :: Dumper , где это необходимо.(О, я бы лучше пошел с YAML - TMTOWTDI!)

Т.е. вы запускаете генератор дампа один раз, просматриваете структуры дампа, фиксируете их, а затем просто полагаетесь на is_deeply до завершения теста, что означает либо ошибку, либо предполагаемое изменение структуры.

2 голосов
/ 08 февраля 2011

Я обычно в порядке с is_deeply из Test :: More для этой цели. Я также использовал Test :: Differences для некоторых проектов - похоже, он лучше выводит неравенство.

1 голос
/ 12 июня 2014

Если вы просто хотите проверить структуру, попробуйте Data :: Validate :: Struct .

Вам необходимо определить справочную структуру данных для сравнения с фактической структурой данных, которая может быть любого уровня, любой комбинации вложенных хешей / массивов.

Здесь важно отметить, что этот модуль проверяет тип данных, а не фактические данные.

Ex:

my $exp = {
'body' => {
    'results' => [
        {
            'template' => [
                {
                    'origin' => 'word',
                    'name' => 'word',
                    'id' => 'int',
                    'attributes' => [
                       {
                           'value' => 'number',
                           'key' => 'word'
                       },
                       {
                           'value' => 'text' ,
                           'key' => 'word'
                       }
                    ],
                    'hostname' => 'hostname',
                }
            ]
        }
        ]
    }
};

, а затем

my $v = new_ok('Data::Validate::Struct', [ $exp ]);
ok($v->validate($act), 'validate an exp against an act' . $v->errstr());

будет проверять структуру $act против $exp

Попробуйте взглянуть на Тесты на модуле, я нашел его очень полезным.

0 голосов
/ 09 февраля 2011

Возможно, OP означал, что время потребляется вручную, вводя ожидаемые значения, а не время выполнения. Если у вас известная хорошая структура, вы можете использовать Data :: Dumper или Data :: Dump для создания программного текста, который затем можно будет включить в ваши тесты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...