System.console()在mvn测试期间在命令行中返回null

时间:2019-02-10 17:39:04

标签: java maven

我正在使用testng作为单元测试框架。这是描述问题的代码段。

public class Demo {
 Demo() {
  Console console = System.console();
  if (console == null) {
   System.err.println("Console not found");
  } else {
  console.writer().println("No issue with console");
  }
 }
 public static void main(String[] args) {
  new Demo();
 }
}

测试类

public class DemoTest {
 private Demo demo;
 @BeforeClass
 public void init() {
  demo = new Demo();
 }
}

当我运行mvn test时,当然会在清理和编译阶段运行它,但是它说Console not found后跟NullPointerException

当我从CLI运行Demo类时,它将起作用。就像我说java Demo时一样 No issue with console

我正在使用Java1.8Testng版本

<dependency>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <version>6.14.3</version>
  <scope>test</scope>
</dependency>

1 个答案:

答案 0 :(得分:1)

here引用Javadocs

  

虚拟机是否具有控制台取决于   基础平台以及虚拟平台的方式   机器被调用。如果虚拟机是从虚拟机启动的   交互式命令行,而无需重定向标准输入,并且   输出流,则其控制台将存在,并且通常为   连接到键盘并从中显示虚拟机   已启动,推出。如果虚拟机自动启动,   例如后台作业调度程序,则通常不会   控制台。

当您通过main()方法运行代码时,您正在分离JVM。但是AFAIK,当您通过maven或从IDE内部进行测试时,情况并非如此。

这说明了为什么会看到空值。

以下是一个相关的线程,它添加了更多上下文:https://coderanch.com/t/641563/java/System-console-returns-null