Как спланировать дополнительные тесты, выполняемые внешним сабом? - PullRequest
8 голосов
/ 02 ноября 2011

Мы написали парсеры для различных форматов научных данных в Perl.Недавно я добавил набор тестов с файлом parser_*.t для каждого формата и подформата.

Конечно, API синтаксического анализатора точно такой же, только данные, прочитанные из файлов примеров, которые используются для анализа парсингаотличается.Чтобы упростить тестовые файлы, я написал подпрограмму, которая передает объект анализатора и хэш-структуру, представляющую ожидаемые данные.Похоже, что

my $parser = new MyApp::Parser($file);
test_nested_objects = ($parser, {
     property1 => "value",
     property2 => 123,
     subobject_accessor => {
         property3 => "foobar",
     }
}

Подпрограмма test_nested_objects проходит по хешу и запускает тесты для всех свойств, определенных в хеш, например, если можно вызвать subobject_accessor, возвращает объект и этот объект можно вызватьproperty3.

Я проверил, сколько тестов выполняется всем файлом *.t и добавил tests => 123 ко всем *.t файлам.Теперь я добавил несколько проверок в общую функцию, и все планы неверны.

Как сообщить моему плану о подтестах?Я хотел бы добиться следующего:

  • количество тестов, проведенных перед их выполнением для просмотра прогесов
  • общее число автоматически увеличивается → без изменения чисел вручную при редактировании подпрограммы
  • отдельные тесты в подчиненном элементе, видимые при запуске доказательства (скрывать тесты в вспомогательном элементе и возвращая только 0 или 1 недопустимо, поскольку мне действительно нужно знать, что не так с проанализированными данными)

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

Ответы [ 2 ]

11 голосов
/ 02 ноября 2011

Последняя тенденция в планировании тестов - просто не делать этого.В конце вашего тестового файла вы заявляете, что достигли конца:

 done_testing();

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

Если вам нужно выполнить некоторые вычисления для определения количества тестов, например, измерения размера структуры данных, сделайте это, затем вызовите planпозже:

 use Test::More;  # don't declare the plan yet

 my $test_count = ...;

 plan tests => $test_count; 

Однако вместо того, чтобы строить большие планы, вы можете разделить свои тесты на подтесты.Каждый подтест должен знать только сколько тестов он выполняет, а сценарий должен знать только количество подтестов:

 subtest some_label => sub {
      plan tests => $n;
      ...
      };

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

0 голосов
/ 02 ноября 2011

Если известно количество тестов для каждого формата, вы можете выполнить вычисления тестов в блоке BEGIN, прежде чем использовать Test :: More.

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