我正在嘗試測試除以零的功能。如果我這樣做:System.out.println(5/0),我會得到j(luò)ava.lang.ArithmeticException我正在嘗試測試是否引發(fā)了異常。這是我的單元測試: @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條經(jīng)驗 獲得超8個贊
答案:
您正在將 x 轉(zhuǎn)換為浮點數(shù)。因此,您沒有像在第一個代碼片段中那樣進行整數(shù)除法,而是進行浮點除法。因此,結(jié)果就是 Infinity,這也不例外。
但還有一點需要解釋:
????return?(float)?x/y;
方法
轉(zhuǎn)換
x
為float
((float) x) / y
使用浮點運算執(zhí)行計算返回值
當(dāng)您移除石膏時:
????return?x/y;
方法
x/y
使用整數(shù)算術(shù)執(zhí)行計算將值轉(zhuǎn)換為浮點數(shù)(隱式!)
返回值
因此,實際上存在許多(潛在的)概念錯誤可能導(dǎo)致您犯下錯誤。
類型轉(zhuǎn)換的優(yōu)先級高于
/
.使用 32 位浮點算術(shù)執(zhí)行涉及 an
int
和 a 的算術(shù)運算。float
(int
操作數(shù)將被擴展為 a?float
)加寬也發(fā)生在“賦值上下文”中,語句
return
就是賦值上下文。
添加回答
舉報
0/150
提交
取消