我正在嘗試測試除以零的功能。如果我這樣做:System.out.println(5/0),我會得到java.lang.ArithmeticException我正在嘗試測試是否引發了異常。這是我的單元測試: @Test(expected = ArithmeticException.class) public void given_divideByZeroInput_when_divideByZero_then_verify_throwing_exception() { MathClass sut = new MathClass(); sut.div(10,0); }我的div就是這么簡單: public float div(int x, int y) { return (float) x/y; }但是,單元測試失敗,指出:java.lang.AssertionError: Expected exception: java.lang.ArithmeticException我做錯了什么?我知道有很多方法可以測試拋出的異常,但我試圖堅持使用簡單的方法@Test(excepted = .. )
1 回答

有只小跳蛙
TA貢獻1824條經驗 獲得超8個贊
答案:
您正在將 x 轉換為浮點數。因此,您沒有像在第一個代碼片段中那樣進行整數除法,而是進行浮點除法。因此,結果就是 Infinity,這也不例外。
但還有一點需要解釋:
????return?(float)?x/y;
方法
轉換
x
為float
((float) x) / y
使用浮點運算執行計算返回值
當您移除石膏時:
????return?x/y;
方法
x/y
使用整數算術執行計算將值轉換為浮點數(隱式?。?/p>
返回值
因此,實際上存在許多(潛在的)概念錯誤可能導致您犯下錯誤。
類型轉換的優先級高于
/
.使用 32 位浮點算術執行涉及 an
int
和 a 的算術運算。float
(int
操作數將被擴展為 a?float
)加寬也發生在“賦值上下文”中,語句
return
就是賦值上下文。
添加回答
舉報
0/150
提交
取消