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



我使用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.8&Testng版本

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

从这里引用javadocs

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

当您通过main()方法运行代码时,您正在脱离JVM。但是AFAIK,当你通过maven或在IDE中进行测试时,情况就不一样了。

这就解释了为什么您看到一个空值。

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

最新更新