为了账号安全,请及时绑定邮箱和手机立即绑定

System.out.println()的JUnit测试

System.out.println()的JUnit测试

波斯汪 2019-06-20 16:31:56
System.out.println()的JUnit测试我需要为一个设计不佳的旧应用程序编写JUnit测试,该应用程序正在为标准输出编写大量错误消息。当getResponse(String request)方法的正确行为-它返回一个XML响应:@BeforeClasspublic static void setUpClass() throws Exception {     Properties queries = loadPropertiesFile("requests.properties");     Properties responses = loadPropertiesFile("responses.properties");     instance = new ResponseGenerator(queries, responses);}@Testpublic void testGetResponse() {     String request = "<some>request</some>";     String expResult = "<some>response</some>";     String result = instance.getResponse(request);     assertEquals(expResult, result);}但是,当它得到格式错误的xml或不理解它返回的请求时null写一些东西到标准输出。是否有任何方法来断言JUnit中的控制台输出?如:System.out.println("match found: " + strExpr);System.out.println("xml not well formed: " + e.getMessage());
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

我知道这是一个旧线程,但是有一个很好的库可以这样做:

系统规则

文档中的示例:

public void MyTest {
    @Rule
    public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();

    @Test
    public void overrideProperty() {
        System.out.print("hello world");
        assertEquals("hello world", systemOutRule.getLog());
    }}

它也会让你困住System.exit(-1)以及其他需要测试的命令行工具。


查看完整回答
反对 回复 2019-06-20
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您可以通过以下方式设置System.out打印流SET()(以及为inerr)。您是否可以将其重定向到记录到字符串的打印流,然后检查它?这似乎是最简单的机制。

(我主张,在某个阶段,将应用程序转换为某种日志框架-但我怀疑你已经意识到了这一点!)


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 1300 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信