Отражение, очевидно, здесь не поможет, потому что оно не разрешит доступ к внутренним частям метода (такие инструкции, как for
, if
, et c).
Из вопроса это похоже, вы работаете над какой-то системой обучения, которая обеспечит автоматическую c оценку / оценку работы студента
Так что, как я вижу, у вас есть два варианта:
- У вас также есть доступ к исходному коду, поэтому наличие
for
l oop может быть задачей для анализатора исходного кода, которая будет работать еще до Junit. Этакий дополнительный шаг, который проверит, что ученик не обманывает:
// OK - this will pass
public void methodToImplement() {
for(int i = 0; i < 3; i++) {
System.out.println("Hello: " + i);
}
}
// this is an attempt to cheat that should be recognized:
public void methodToImplement() {
System.out.println("Hello: " + 0);
System.out.println("Hello: " + 1);
System.out.println("Hello: " + 2);
}
Вы можете получить доступ к байт-коду, «прочитав» его (например, открыв файл * .class и прочитав в памяти набор инструкций, как будто это строка или что-то в этом роде) и найдя указанную c инструкцию, но затем вы не на самом деле нет гарантии, что компилятор не будет выполнять какую-либо оптимизацию и намеренно исключит l oop (хорошо, в этом примере это может не произойти, я не очень разбираюсь в оптимизации компилятора, но вы получить представление в общем).