Код модульного теста с несколькими объектами Scanner локальной области - PullRequest
0 голосов
/ 27 марта 2020

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

...