【问题标题】:In JUnit testing is it possible to check the method System.out.println() [duplicate]在 JUnit 测试中是否可以检查方法 System.out.println() [重复]
【发布时间】:2012-05-20 15:37:42
【问题描述】:

可能重复:
JUnit test for System.out.println()

是否可以通过 JUnit 测试检查 System.out.println("One, Two") 方法是否实际打印 One, Two?

【问题讨论】:

  • @bunting 这样就可以了,但我建议仅在您无法重构代码的情况下使用这种方法。如果您正在测试新代码,这看起来像是代码异味。
  • 你想测试Java核心库方法吗?为什么?

标签: java unit-testing io


【解决方案1】:

是的,您可以,您可以将默认 System.out 更改为文件、缓冲区等,并对新流进行单元测试以获取预期数据。但 IMO 这是一个非常糟糕的主意。

其他方法将使用 Logger 代替标准输出并对日志进行单元测试,但再次对 logger 进行单元测试听起来很奇怪。至少如果您不开发日志工具:)

对我来说,这听起来像是对什么是单元测试的理解不好,但我可能是错的。

【讨论】:

  • 我确实了解什么是单元测试,并且我可以轻松地将 system.out.println 转换为数组、列表或任何类型的容器,这样更易​​于测试。只是徘徊,如果方法本身可以测试。
【解决方案2】:

一个更好的主意是通过不直接使用 System.out 来更改您的应用程序,使其更具可测试性。

  • 如果您尝试测试的方法旨在为最终用户写入输出,请修改它或封闭类,以便目标 OutputStream 或 PrintWriter 或任何参数。

  • 另一方面,如果该方法正在生成日志输出,请使用适当的日志框架...并考虑是否值得对日志输出进行单元测试。

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多