我正在使用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>
答案 0 :(得分:1)
从here引用Javadocs
虚拟机是否具有控制台取决于 基础平台以及虚拟平台的方式 机器被调用。如果虚拟机是从虚拟机启动的 交互式命令行,而无需重定向标准输入,并且 输出流,则其控制台将存在,并且通常为 连接到键盘并从中显示虚拟机 已启动,推出。如果虚拟机自动启动, 例如后台作业调度程序,则通常不会 控制台。
当您通过main()
方法运行代码时,您正在分离JVM。但是AFAIK,当您通过maven或从IDE内部进行测试时,情况并非如此。
这说明了为什么会看到空值。
以下是一个相关的线程,它添加了更多上下文:https://coderanch.com/t/641563/java/System-console-returns-null