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