簡體   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