Конечно, это выполнимо.
Разархивируйте файл, загрузите каждый файл и запустите тесты для определенных методов / классов.
Но есть как минимум две вещи, которые нужно учитывать ...
Безопасность
Учащийся может перезаписать ваш test
метод, чтобы получить только хорошие оценки, или случайные, или что-то еще. Потому что вы в основном загружаете их код в тот же процесс, который их оценивает. Конечно, вы можете сделать имена методов неочевидными, но безопасность через неизвестность просто скрещивает пальцы и надеется, что вам повезет (например, студент может создать сценарий, который загружает ваш исходный код куда-нибудь для проверки позже)
Я бы решил это с помощью небольшого API, которое принимает код, исходный файл, метод для вызова и возвращает результат. Поэтому вместо загрузки файла в свое пространство - вы просите отдельное приложение произвести вывод, и в вашем основном приложении его оценит / решит.
Согласованность результатов
т.е. один учащийся мог перезаписать определение Object.to_s
, а другие использовали бы его, думая, что это оригинальная реализация - таким образом, их код не может дать желаемый результат.
Решением этой проблемы будет запуск каждого теста в отдельном процессе (не только в потоке)
Это, к сожалению, возвращает нас к безопасности - каждый скрипт сможет читать и изменять код, который доступен приложению, которое его запускает.
Так! Что делать тогда?
Самая простая вещь, о которой я могу подумать сейчас, - это запустить контейнер (то есть докер, ракету или другой) и запустить там код. Дополнительным преимуществом было бы то, что вы можете поделиться изображением контейнера со студентами, и они смогут выполнять свой код в той же среде, делая результаты настолько согласованными, насколько вы можете себе представить.