我正在學習JUnit和測試驅動開發實踐。我有空貨幣接口:如果構造函數存在,如何使JUnit測試失敗?
它實現貨幣接口CommonMoney類:
public class CommonMoney implements Money {
private CommonMoney() {
}
public static Money create(String decimalPart, Currency currency) {
return new Money() {
};
}
}
和測試CommonMoney
public class MoneyTest {
// some test cases before
@Test
public void shouldNotCreateCommonMoneyObjectWithEmptyConstructor() {
@SuppressWarnings("unused")
Money money = new CommonMoney();
fail();
}
}
現在測試用例shouldNotCreateCommonMoneyObjectWithEmptyConstructor是紅色MoneyTest類,但它如果CommonMoney的構造函數是私有的,應該是綠色的,如果是公共的,則應該是綠色的。是否有可能做出這樣的測試用例?我該怎麼做?
如果構造函數是私有的,那麼您的測試類不會編譯。 – agad
你可以使用反射,但**爲什麼?**你不相信你正在使用的人嗎?另外請注意,隨着系統的增長,實施測試很脆弱並且難以維護。 – kdgregory
如果你只是想保證private構造函數永遠不會被調用(因爲什麼原因)在構造函數的主體內拋出一個檢查異常。但是,正如agad已經指出的那樣,由於類之外的構造函數不可見,你的測試甚至不會編譯。 –