我有一個枚舉開關或多或少是這樣的:嘲諷的Java枚舉添加一個值來測試失敗的情況下
public static enum MyEnum {A, B}
public int foo(MyEnum value) {
switch(value) {
case(A): return calculateSomething();
case(B): return calculateSomethingElse();
}
throw new IllegalArgumentException("Do not know how to handle " + value);
}
,我想有全部由測試所覆蓋的線路,但因爲代碼需要處理所有可能性,所以我不能在交換機中沒有相應的case語句的情況下提供一個值。
擴展枚舉以添加額外值是不可能的,只是嘲笑equals方法返回false
將無法工作,因爲生成的字節碼使用幕後跳轉表來轉到正確的情況。所以我認爲PowerMock或許可以實現一些黑魔法。
謝謝!
編輯:
至於我自己的枚舉,我以爲我可以只添加一個方法來值,從而避免了開關問題徹底;但我仍然留下這個問題,因爲它仍然很有趣。
的IlegalArgument可從來沒有因爲明確的性能被拋出的枚舉,但是你有什麼要混淆你的代碼來測試它將處理不可能的事情?如果你真的想要拜拜你的生產線速度指標,爲什麼不刪除永遠不能執行的生產線呢? – Raedwald 2013-08-22 22:27:03
@Raedwald理由2:首先,其他人可能會爲枚舉創建一個新值,並忘記爲該開關添加一個新案例;其次,在切換之後,如果沒有'throw'或'return',代碼將不會編譯。 – fortran 2013-08-23 10:17:22
經過考慮,我認爲只是讓它沒有經過測試。沒有非法的枚舉值來觸發異常,並且嘲笑是很痛苦的。我認爲投球很好,這是未來的證明,只是很難測試。不值得費力測試,恕我直言。 – 2016-09-20 21:51:43