我使用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