Как динамически генерировать и выполнять модульные тесты для нескольких языков программирования в виде строк?
Я работаю над системой, в которой решения проблем проверяются с помощью предопределенных тестовых случаев. Система поддерживает несколько языков программирования, и сгенерированные тестовые случаи необходимо преобразовать в строки для выполнения API.
Проблема: Для тестирования представленных решений мне необходимо динамически генерировать тестовые примеры для каждого языка программирования. Сгенерированные тесты должны:
Включите предопределенные базовые тестовые случаи для каждой проблемы (например, проверка функции палиндрома).
Позволяет динамически добавлять пользовательские тестовые случаи (например, определяемые пользователем краевые случаи). Сгенерированные тесты должны быть преобразованы в строку и отправлены в Judge0 для выполнения.
Текущий подход: Для Python:
Я использую unittest
для определения базовых тестовых случаев в файле (например, test_palindrome.py).
Пользовательские тестовые случаи добавляются динамически в виде новых тестовых методов.
И базовые, и пользовательские тестовые случаи объединяются в одну строку.
Следующий код уже существует в файле is_palindrome.py
, но необходимо добавить новые пользовательские тестовые случаи.
import unittest
class TestPalindrome(unittest.TestCase):
def test_base_cases(self):
self.assertTrue(is_palindrome("radar"))
self.assertFalse(is_palindrome("hello"))
Например, для заданного пользовательского ввода:
[
{ "input": "'level'", "expected_output": "True" },
{ "input": "'world'", "expected_output": "False" }
]
Мне нужно сгенерировать строку этих тестовых случаев и добавить их к существующим тестам после того, как файл is_palindrome.py
будет прочитан.
def test_custom_0(self):
self.assertEqual(is_palindrome('level'), True)
def test_custom_1(self):
self.assertEqual(is_palindrome('world'), False)
Для других языков, таких как Java или JavaScript, я использую соответствующие фреймворки тестирования (например, JUnit, Jest) и следую аналогичному подходу для динамической генерации тестовых примеров в виде строк. Я знаю, что генерация строк будет мучительной задачей, но языки, которые мне нужно охватить, следующие -
- C
- C++
- Python 3
- Java
- JavaScript
- TypeScript
- C#
- Ruby
- PHP
- Go
- Rust
Мои вопросы:
Эффективен ли такой подход, когда тестовые случаи генерируются динамически и преобразуются в строки, для нескольких языков?
Может ли создание системы для генерирования тестовых примеров в виде строки для разных языков быть лучшим подходом?
Может быть, ведение предопределенных тестовых файлов для каждой проблемы/языка и добавление пользовательских тестовых случаев динамически перед преобразованием в строку будет лучшим подходом?
Как безопасно и эффективно обрабатывать пользовательские тестовые случаи, обеспечивая при этом, чтобы процесс генерации строк не был узким местом?
Существует ли простой способ генерировать тестовые примеры для разных языков с помощью python?
Любые советы, лучшие практики или примеры реализации такой системы будут очень признательны. Спасибо!