繁体   English   中英

通过此JUnit测试

[英]Making this JUnit Test pass

这是测试:

@Test
public void invalidPort() {
    try {
        SS.main(SS_ARGS);
        assertTrue(false);
    } catch (Exception e) {
        assertTrue(true);
    }
}

这是SS中的相关代码:

public static void main(String[] args) {
    try {

        if (obj.start() == 0) {
            ...stuff
        }
    } catch (BindException e) {
        System.out.println("Address already in use.");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

这是obj.start()的作用:

public int start() {
    try {
        HttpServer server = HttpServerFactory.create(serverURI);
        this.server = server;
        server.start();
        return 0;
    } catch (NullPointerException e) {
        System.out.println("Error: Please specify the server URI");
        return 1;
    } catch (Exception e) {
        System.out.println("Error: Invalid port!");
        return 1;
    }


}

在此测试中,我确保端口无效。 运行时,程序将打印出“错误:端口无效!”。 很好,但是测试没有通过。 它失败,因为它到达了assertTrue(false)行。 我如何才能通过此考试?

如果您在main方法中捕获了所有相关的异常,则main方法将不会引发异常,因此您的测试始终会失败(因为它期望引发异常)。

您提到的控制台输出来自异常的catch块。 如果您捕获到异常,则该异常将消失并且不会传递给测试。

通常,建议使用输入和输出值构造小的可测试方法。 通常应避免为用户测试输出(如控制台输出)。 通过将逻辑与输出尽可能地分离,可以彻底测试而不会出现上述问题。

@Test(expected=IllegalStateException.class)
public void invalidPort() {
        SS.main(SS_ARGS);
}

将IllegalStateException替换为所需的实际异常实现。 (也许您应该从主方法中抛出异常,而不是仅将其记录到stderr?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM