猿问

System.out.println()的JUnit测试

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());


波斯汪
浏览 1301回答 3
3回答

慕容3067478

我知道这是一个旧线程,但是有一个很好的库可以这样做:系统规则文档中的示例:public&nbsp;void&nbsp;MyTest&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Rule &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;final&nbsp;SystemOutRule&nbsp;systemOutRule&nbsp;=&nbsp;new&nbsp;SystemOutRule().enableLog(); &nbsp;&nbsp;&nbsp;&nbsp;@Test &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;overrideProperty()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("hello&nbsp;world"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertEquals("hello&nbsp;world",&nbsp;systemOutRule.getLog()); &nbsp;&nbsp;&nbsp;&nbsp;}}它也会让你困住System.exit(-1)以及其他需要测试的命令行工具。

侃侃尔雅

您可以通过以下方式设置System.out打印流SET()(以及为in和err)。您是否可以将其重定向到记录到字符串的打印流,然后检查它?这似乎是最简单的机制。(我主张,在某个阶段,将应用程序转换为某种日志框架-但我怀疑你已经意识到了这一点!)
随时随地看视频慕课网APP
我要回答