Как динамически генерировать и выполнять модульные тесты для нескольких языков программирования в виде строк?

Я работаю над системой, в которой решения проблем проверяются с помощью предопределенных тестовых случаев. Система поддерживает несколько языков программирования, и сгенерированные тестовые случаи необходимо преобразовать в строки для выполнения 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?

Любые советы, лучшие практики или примеры реализации такой системы будут очень признательны. Спасибо!

Вернуться на верх