Я пытаюсь провести модульное тестирование представлений некоторых учащихся для ТА начального уровня CS класса I, чтобы автоматизировать оценку.
Их код должен выглядеть примерно так:
public static void main(String[] args){
Scanner input = new Scanner(System.in);
//some menu that routes to various methods
}
private static void foo(String[] bar) {
Scanner input = new Scanner(System.in);
String userInput = input.nextLine();
//some things happen here
}
Мой модульный тест изменяет System.in следующим образом:
final InputStream originalIn = System.in; //System.in to restore it later
ByteArrayInputStream in = new ByteArrayInputStream(inputString.getBytes());
System.setIn(in);
String[] args = {""};
Submission.main(args); //uses inputString to simulate tedious option selecting and TA inputs
System.setIn(originalIn);
Я сталкиваюсь с ошибкой, когда изменения, внесенные в System.in, не переносятся. Я понимаю, что объекты Scanner имеют разные адреса в памяти, но я не уверен, как System.in
, кажется, меняется с main()
на foo()
. К сожалению, если ученики передадут Сканер в foo()
из main()
, это может быть слишком отвлекающим для теста, поэтому я бы предпочел не принимать такое решение. Существуют ли другие способы гарантировать, что эти модульные тесты пройдут и не пройдут правильно?