【问题标题】:JUnit test a static void method [duplicate]JUnit测试静态void方法[重复]
【发布时间】:2014-01-05 10:39:51
【问题描述】:

所以我创建了一个日志功能,这样我就可以看到每个操作的日期。我现在想对它们进行单元测试。因为该函数使用 void,所以我无法测试输出。

我可能会将 void 更改为 String,但是使用它作为 void 的意义就没有了!

我有什么选择?

public class Logger {

    public static void log(String s) {
        Date d = new Date();
        SimpleDateFormat ft =
                 new SimpleDateFormat ("yyyy.MM.dd '-' hh:mm:ss");
        System.out.println("[" + ft.format(d) + "]: " + s);
    }

}

JUnit

@Test
public void testLoggerEmptyString() {
    String s = "";
    log(s);
}

谢谢:D

【问题讨论】:

    标签: java string logging junit void


    【解决方案1】:

    您需要测试您的方法的副作用。在这种情况下,您要观察的副作用是写入System.out。您可以使用System.setOut 安装您自己的OutputStream。从那里您可以验证是否已写入某些内容。

    例如:

    String s = "your message";
    ByteArrayOutputStream sink = new ByteArrayOutputStream();
    System.setOut(new PrintStream(sink, true));
    log(s);
    assertThat(new String(sink.toByteArray()), containsString(s));
    

    【讨论】:

    • 完成后记得设置 System.out!
    【解决方案2】:

    我可能会将 void 更改为 String,但是使用它作为 void 的意义就没有了!

    我不这么认为。如果您的方法如下所示:

    public static String getLogMessage(String s) {
        Date d = new Date();
        SimpleDateFormat ft = new SimpleDateFormat ("yyyy.MM.dd '-' hh:mm:ss");
        return String.format("[%s] %s", ft.format(d), s);
    }
    

    您可以测试输出并在您的代码中使用它

    System.out.println(Whatever.getLogMessage("Foo for the world"));
    

    甚至

    System.err.println(Whatever.getLogMessage("Holy shit!"));
    

    【讨论】:

      【解决方案3】:

      您可以使用库System Rules。它会在测试后自动设置System.out

      public void MyTest {
        @Rule
        public final StandardOutputStreamLog log = new StandardOutputStreamLog();
      
        @Test
        public void testLoggerEmptyString() {
          log("hello world");
          assertEquals("hello world", log.getLog());
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 2023-02-13
        • 2022-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多