Обычно DUnit работает так: вы пишете несколько опубликованных методов, а DUnit запускает их как тесты. Я хочу немного по-другому. Я хочу создавать тесты во время выполнения на основе данных. Я пытаюсь протестировать конкретный модуль, который обрабатывает входные файлы для создания выходных файлов. У меня есть набор тестовых входных файлов с соответствующими заведомо исправными выходными файлами. Идея состоит в том, чтобы динамически создавать тесты, по одному для каждого входного файла, которые обрабатывают входные данные и сравнивают выходные данные с заведомо исправными.
Однако фактический источник данных здесь не важен. Сложность состоит в том, чтобы заставить DUnit работать в соответствии с данными. Ради этой проблемы предположим, что источником данных был просто генератор случайных чисел. Вот пример конкретной проблемы, которая раскрывает суть проблемы:
Создайте несколько тестовых объектов (TTestCase или что-то еще) во время выполнения, скажем, 10 из них, где каждый
- Именуется во время выполнения из случайно сгенерированного целого числа. (Под «именем» я подразумеваю имя теста, которое появляется в дереве запуска тестов.)
- Проходит или не проходит на основе случайного целого числа. Считайте четным, а не нечетным.
С точки зрения дизайна DUnit выглядит так, как будто он был разработан с учетом достаточной гибкости, чтобы сделать такие вещи возможными. Я не уверен, что это так. Я попытался создать свой собственный тестовый класс, унаследовав его от TAbstractTest и ITest, но некоторые важные методы были недоступны. Я также пробовал унаследовать от TTestCase, но этот класс тесно связан с идеей запуска опубликованных методов (а тесты названы в честь методов, поэтому я не мог просто иметь один, скажем, 'go', потому что тогда все мои тесты будут называться "go", и я хочу, чтобы все мои тесты были названы индивидуально).
Или, альтернативно, есть ли альтернатива DUnit, которая могла бы делать то, что я хочу?