![](/img/trans.png)
[英]Adding 'Getters' and 'Setters' for the sake of unit testing?
[英]unit testing of setters and getters
老師要我們做一個全面的單元測試。 對我來說,這將是我第一次使用JUnit。 我對測試set和get方法感到困惑。 你認為我應該測試它們嗎? 如果答案是肯定的; 這段代碼足夠用於測試嗎?
public void testSetandGet(){
int a = 10;
Class firstClass = new Class();
firstClass.setValue(10);
int value = firstClass.getValue();
Assert.assertTrue("Error", value==a);
}
在我的代碼中,我認為如果有錯誤,我們無法知道錯誤是由於setter或getter而導致的。
我會說不要為setter和getter編寫單元測試,除非你的setter和getter包含程序邏輯(在調用setter或getter時計算的東西)。
在一個真實的項目中,你將擁有更多的程序邏輯來進行單元測試,而無需像setter和getter那樣測試一些微不足道的東西。
Roy Osherove在他的着名着作“單位測試的藝術”中說:
屬性(Java中的getter / setter)是通常不包含任何邏輯的代碼的良好示例,並且不需要測試。 但請注意:一旦在屬性中添加任何檢查,您將需要確保正在測試邏輯。
您正在測試您設置的內容,也可以“獲取”。 將您的Assert
語句更改為:
Assert.assertTrue(a, true);
此外,你應該通過a
,如果你要使用它。
我認為如果你有一些條件,這很重要。 例如,如果它返回異常,如果你的int必須是正數或其他條件。 但如果它只是一個變量賦值,我認為它沒有用......對於吸氣者來說也是如此。
如果我是你,我會首先為我正在測試的類中的屬性set
一些值,然后我將確保get
方法返回相同的值。
public void testSetandGet(){
int a = 10;
Class firstClass = new Class();
firstClass.setValue(10);
int value = firstClass.getValue();
Assert.assertEquals(value, a);
}
不要對依賴於被測試類之外的東西的任何東西進行單元測試。
如果你的getter和setter是微不足道的,那么只有當底層JVM /編譯器失敗時它們才會失敗 - 所以你實際上是在測試JVM /編譯器,而不是你的代碼。
如果你想測試它,你可以暫時將變量公開,然后:
firstClass.setMyInt(5);
Assert.assertTrue(5, firstClass.myInt);
但是,getter和setter可以自動生成,它們通常只包含方法中的一行,如果它們導致代碼失敗,則可能會遇到更大的問題。 單元測試不常用來測試吸氣劑和定位器,你可以避免測試它們,你的單元測試仍然是全面的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.