如何在Java中对读取输入的类进行单元测试?

Ann*_*nan 2 java io junit

如何针对从System.in读取用户输入的类运行测试?

例如:

private int getUserInput() {
    Scanner scanner = new Scanner(System.in);

    System.out.print("What's ya input? [1-3]: ");
    return scanner.nextInt();
}
Run Code Online (Sandbox Code Playgroud)

我认为可能是对主类进行子类化并覆盖getUserInput以反馈脚本化的答案.虽然如果您需要阅读System.out来决定输入,这将不起作用.

我花了几个小时查找Threads然而无法弄清楚如何使用它们.

Mar*_*ers 13

好吧,你可以替换System.in使用,System.setIn()但我不赞成这种方法.设置全局状态总是会使您的测试更加脆弱和不透明.

相反,你应该尝试打破依赖关系,例如通过InputStream类的构造函数将想要读取的内容注入到类中.一旦你这样做,当你进行单元测试时,你可以传入自己的InputStream读取静态数据,并在生产代码中注入System.in.