java - 使用 Console.readline() 测试 void main 的输出

标签 java junit console mockito

我需要通过输出(在 system.out 中)对现有代码进行 junit 测试

public static void main(String args[])
{
   Console console = System.console();
   String str = console.readLine();
   System.out.println("halo"+str);

}

由于console.readline正在等待用户输入,我发现它会在console.readline()中停止,从而阻止我获取输出。

有办法做到这一点吗?是否可以使用 Mockito 或其他东西来做到这一点?

最佳答案

测试与 System.console() 一起使用的代码几乎是不可能的,因为 System.console() 总是返回 null在测试中。此外,Console 是没有公共(public)构造函数的最终类。

我建议与 Console 的作者和读者合作,并测试适用于作者和读者的代码。

public static void main(String args[]) {
   Console console = System.console();
   BufferedReader reader = new BufferedReader(console.reader());
   main2(reader, console.writer(), args);
}

static void main2(BufferedReader reader, Writer writer, String args[] {
   String str = reader.readline();
   System.out.println("halo"+str);
}

可以使用 System RulesStandardOutputStreamLog 规则测试到 System.out 的输出。图书馆。但在您的代码中,写入 Console 的编写器而不是 System.out 要容易得多。

关于java - 使用 Console.readline() 测试 void main 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21620484/

相关文章:

C#控制台字体

java - Dagger2 在 setText 调用 ViewModel 时崩溃

java - JUnit 测试 if else 情况

java - 使用junit设置类路径时出错

java - 使用 Mockito 测试返回的字符串是否具有一定长度

javascript - 在 javascript 中查看对象(底层)

c++ - 为什么通过系统 ("color YX"在 C++ 控制台应用程序中更改颜色)不是最佳解决方案?

java - 模拟测试 SOAP 接口(interface)

java - 使用 JAXB 解析 XML

Java 流 : Organize a collection into a map and select smallest key