Общий случай
В общем случае нет. Так как они даже не знают, что вы правильно выполнили тест, ничто из того, что они делают - даже не правильно выполняют домашнее задание - не может гарантировать прохождение теста.
Особые случаи
Если учащиеся могут выполнить ваш тест, они могут использовать алгоритм обучения.
Если учащиеся имеют доступ к исходному коду вашего теста, они могут искать хитрости, такие как использование отражения для получения ожидаемых результатов, хранящихся в переменных. Если они не могут найти какие-либо трюки с исходным кодом, они все равно могут скомпилировать и запустить ваши тесты.
Если учащиеся имеют доступ к байт-коду вашего теста, они могут, вероятно, разобрать его и использовать приемы с исходным кодом. Даже если вы эффективно его запутали, они все равно смогут его запустить.
Если учащиеся знают, что вы тестируете код ученика по сравнению с кодом другого ученика, все, что им нужно сделать, это быть последовательным.
Рекомендации
- Не делайте тест доступным для студентов. Они должны самостоятельно проверять свою домашнюю работу. После того, как они предоставят вам домашнее задание для официальной оценки, запустите тесты.
- Используйте рандомизацию, чтобы сделать ваши тесты более надежными.
- Если ваш тест сравнивает код студента с кодом другого студента, то вам следует вручную исследовать каждый сбой. Может быть, один ученик реализовал правильно, а другие скопировали неверную реализацию. В этом случае большинство правил вознаграждает некомпетентность.
- Вы можете собирать их тесты и тестировать их тесты.