Ваша стратегия и каркас зависят, нетривиально, от того, какие тесты вы хотите сгенерировать, какой охват вы ищете, и от языка / среды, в которой вы работаете.
Довольно просто написать генератор тестов, который для языков, таких как C или Java, читает сигнатуры классов и автоматически генерирует тесты для стандартных угловых случаев (передача 0, 2 случайных значений, MAX_INT, MIN_INT, целочисленному аргументу, нули для обнуляемых значений). , и т.д...). Затем вы можете запустить сгенерированные тесты, записать результаты для каждого теста и вручную отфильтровать их, чтобы удалить ненужные, утвердить приемлемые результаты для тестов, которые прошли (чтобы они могли автоматически проходить с тех пор), и пометить как недействительные, которые не прошли ,
Вы можете дополнить это пометкой / комментированием / рефакторингом классов, чтобы помочь вашему генератору с дополнительными подсказками. У вас может быть тег, который перечисляет все возможные исключения, которые разрешено вызывать при вызове метода, или который дает уменьшенный диапазон допустимых целых чисел для целочисленного аргумента. Посмотрите на них как на сокращение для того, чтобы написать тесты самостоятельно.
Итак, вот некоторые компоненты, которые вы хотите посмотреть:
- Компонент для автоматического анализа исходного кода / сигнатур функций / ручных аннотаций, создания стандартных тестовых случаев или схем / подписей для тестовых случаев, ожидающих завершения ввода.
- Постоянно растущий / изменяющийся язык тегов / аннотаций / комментариев, который может переходить на любой уровень детализации (метод / класс / сигнатура / циклы while / и т. Д.), Представляющий подсказки автоматизированному построителю тестов. В идеале вы должны быть в состоянии играть с этим языком без необходимости перекодировать ваш фреймворк или какие-либо куски в нем
- Автоматизированный тестовый прогон, с возможностью идентифицировать новые / старые тесты и записывать / тестировать «приемлемые» ответы для каждого теста. В идеале этот участник должен создать базу данных о тестовых прогонах, принятых / отклоненных результатах и текущих приемлемых результатах для каждого теста.
- Автоматизированный "объектный фейкер", который, учитывая имя класса и карту имен-> значений, может генерировать объект, имитирующий класс, возвращая настраиваемые данные для вызовов функций, средств доступа, открытых слотов данных и т. Д.
Существует множество тестовых сред, которые уже включают в себя фрагменты этой функциональности для различных языков и платформ. Несмотря на то, что довольно легко начать выполнять эту работу самостоятельно и органично развивать подобную структуру самостоятельно, это также бесконечный долгосрочный проект, который, вероятно, будет дублировать существующую работу. Я бы порекомендовал потратить значительное время, чтобы сначала посмотреть на то, что доступно, а затем решить, стоит ли тратить время на погружение.