簡體   English   中英

使用 JUnit 測試構造函數(或 setter)的最佳方法是什么?

[英]What is the best way to test constructor (or setters) with JUnit?

我有兩個解決方案來測試我的構造函數(或 setter)。

第一種是使用getters

public void Test() {
    Person p = new Person("toto"); // name
    assertEquals("toto", p.getName());
}

二是使用Field

public void Test() {
    Person p = new Person("toto"); // name
    final Field fieldName = p.getClass().getDeclaredField("name");
    fieldName.setAccessible(true);
    assertEquals("toto", fieldName.get(p));
}

你的建議是什么?為什么? 謝謝你。

IMO,反思應盡可能避免。 當然,在某些情況下需要它,但在大多數情況下,不值得對性能和安全進行大量權衡。

其次,可以說更重要的是,如果測試一段代碼的唯一方法是使用反射,那么您可能不需要測試它。

考慮以下示例:

public class Message {
    private String message;

    public Message(Message message) {
        this.message = message;
    }

//  NO GETTERS/SETTERS
}

如果我想測試這個構造函數是否“有效”,我可以編寫一個測試,它使用反射來查看我的對象內部並檢查消息是否與構造函數參數匹配。 但這有什么好處呢?

據推測,我希望這個消息類以某種方式被另一段代碼使用。 該代碼如何工作? 我會發現我可能需要一個getMessage()方法或等效的東西來對對象做任何有用的事情。

一般來說,在單元測試中使用反射是不好的,因為它測試的是底層實現,而不是行為 當有人出現時,您的單元測試不應中斷,例如,重構代碼以將數據存儲在遠程服務器上。

另外,我會避免使用像這樣的“瑣碎”測試來進行混亂的測試。 專注於測試您的業務邏輯。 相信 JVM 會在很大程度上像宣傳的那樣工作。

您可以使用名為 openpojo 的非常方便的庫來自動測試 POJO。

https://github.com/OpenPojo/openpojo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM