Ваша стратегія та скелет нетривіально залежать від того, які типи тестів ви бажаєте створити, яке покриття ви шукаєте та мову / середовище, в якому працюєте.
Досить прямо вперед написати тестовий генератор, який для таких мов, як C або Java, зчитує підписи класів і автоматично генерує тести для стандартних кутових випадків (передаючи 0, 2 випадкових значення, MAX_INT, MIN_INT, на цілий аргумент, нулі для нульових значень тощо). Потім можна запустити згенеровані тести, записати результати для кожного тесту та вручну фільтрувати їх, щоб видалити невідповідні, затвердити прийнятні результати для тестів, які проходять (щоб вони потім могли автоматично проходити далі) та позначити як недійсні, які не вдалися .
Ви можете доповнити це додаванням тегів / коментування / рефакторингу класів, щоб допомогти вашому генератору з додатковими підказками. Можливо, у вас є тег, який перераховує всі можливі винятки, з яких дозволено викликати виклик методу, або який дає зменшений діапазон дійсних цілих чисел для цілого аргументу. Подивіться на це як на короткий хід, щоб самостійно писати тести.
Отже, ось деякі компоненти, які ви хочете переглянути:
- Компонент для автоматичного розбору вихідних кодів / підписів функцій / ручних анотацій, створення стандартних тестових випадків або контур / підписів для тестових випадків, які чекають завершення вашого вводу.
- Постійно зростаюча / мінлива мова тегів / анотацій / коментарів, яка може переходити на будь-який рівень деталізації (метод / клас / підпис / під час циклів / тощо), що представляє підказки автоматизованому конструктору тестів. В ідеалі ви повинні мати можливість грати з цією мовою, не перекодуючи свій фреймворк або будь-які шматки в ньому
- Автоматизований тест-бігун, з можливістю ідентифікувати нові / старі тести та записувати / тестувати проти "прийнятних" відповідей для кожного тесту. В ідеалі цей бігун створить базу даних пробних пробігів, прийнятих / відхилених результатів та поточних прийнятних результатів для кожного тесту.
- Автоматизований "обробник об'єктів", який, даючи ім'я класу та карту імен-> значень, може генерувати об'єкт, що імітує клас, повертаючи настроювані дані для викликів функцій, аксесуарів, відкритих слотів даних тощо ...
Існує безліч тестових рамок, які вже містять фрагменти цієї функціональності для різних мов та платформ. Незважаючи на те, що почати робити цю роботу досить просто і органічно вирощувати подібну структуру в органічному режимі, це також нескінченний довгостроковий проект, який, ймовірно, буде дублювати існуючі роботи. Я рекомендую витратити багато часу, щоб переглянути спочатку доступні, а потім вирішити, чи варто того часу зануритися.