Java 使用Intellij和JUnit从控制台读取System.in

Java 使用Intellij和JUnit从控制台读取System.in,java,intellij-idea,junit,console,Java,Intellij Idea,Junit,Console,当通过Idea中的main运行代码时,以下代码可以很好地工作 System.in.read() 但是,junit方法中的相同代码不起作用 public void testConsoleRead() { System.in.read(); } 您知道如何实现这一点吗?您需要使用Scanner类。 首先导入它: import java.util.Scanner 现在使用它: Scanner scanner = new Scanner(System.in); String text = sc

当通过Idea中的main运行代码时,以下代码可以很好地工作

System.in.read()
但是,junit方法中的相同代码不起作用

public void testConsoleRead()
{
  System.in.read();
}
您知道如何实现这一点吗?

您需要使用Scanner类。 首先导入它:

import java.util.Scanner
现在使用它:

Scanner scanner = new Scanner(System.in);
String text = scanner.next();
scanner.close();
还有更多的方法,比如
scanner.nextLine()


此外,您可能需要在此处处理一些异常,但这并不难理解。

您需要使用
-Deditable.java.test.console=true启动IDE(例如,通过“帮助”>“编辑自定义VM选项…”),请参阅。

为什么要这样做?JUnit首先是一个自动化框架;所以要求用户在控制台上提供一些信息。。。看起来有点奇怪?!仍然是一个有趣的问题;但是我想知道这个问题背后的要求是什么。为了从一些代码启动探查器,您需要手动更改探查器;-)允许用户输入需要与某个内容“匹配”的文本比在某处放置一些常量并对一次运行的选项进行硬编码要好得多?它是Java代码的外部分析器,Yourkit,测试需要一个我们不关心的“大”初始化,只需要几秒钟的实际代码。为什么你不能把你想要的东西放在一个配置文件中并从那里读取呢?单元测试环境中的用户交互似乎是错误的。Scanner与System.in.read()类似,但问题相同。没有办法让它工作,因为System.in并没有指向IDEA控制台。这是有用的信息,你应该在你的帖子中提及您应该知道从何处读取System.in。它可能是从另一个角度看的。只要你的代码暂停执行,你就会知道它在工作但是,对需要手动输入的东西进行自动化测试毫无意义。