JUnit测试一个静态void方法

bob*_*ann 2 java string logging junit void

所以我创建了一个日志功能,这样我就可以看到每个动作的日期.我现在想对它们进行单元测试.因为函数使用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);
    }

}
Run Code Online (Sandbox Code Playgroud)

JUnit的

@Test
public void testLoggerEmptyString() {
    String s = "";
    log(s);
}
Run Code Online (Sandbox Code Playgroud)

感谢:D

Jef*_*rey 5

您需要测试方法的副作用.在这种情况下,您要观察的副作用是写入的内容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));
Run Code Online (Sandbox Code Playgroud)