故事還在繼續......
小張童鞋寫的程序一直未報bug,這激發了他繼續編程的興趣,于是乎,他又寫了個除法程序,說到除法,就不得不考慮的一種情況:
除數為零怎么辦?
答:拋出異常。
所以,小張童鞋要解決兩個問題:
- 除數為零應該拋出什么異常?(讓小李有思想準備來處理這種異常)
- 用單元測試怎么測試這種異常?
為了解決第一個問題:
小張先寫了一個最簡單的版本:
package com.hui.demo;
public class Core {
public int divide(int a, int b) {
return a/b;
}
}
想知道想知道報什么異常,調用一下就知道了,于是他寫了一個main方法來調用他的除法程序,而且刻意讓除數為零,觀察Eclipse下報了什么錯。
import com.hui.demo.Core;
public class T {
public static void main(String[] args) {
Core core = new Core();
core.divide(3, 0);
}
}
運行一下發現控制臺報錯:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.hui.demo.Core.divide(Core.java:5)
at T.main(T.java:6)
所以第一個問題的答案是:java.lang.ArithmeticException
PS:關于這個異常,無論你百度谷歌必應搜狗,你都可以找到這個異常的意思是什么,即便是英文版的java的API:
http://docs.oracle.com/javase/8/docs/api/index.html
中對這個異常的英文描述,相信你都可以看得懂:
Thrown when an exceptional arithmetic condition has occurred. For example, an integer "divide by zero" throws an instance of this class.
所以,小張自熱而然的把自己的程序處理成這樣:
package com.hui.demo;
public class Core {
public int divide(int a, int b) {
if (0 == b) {
// 除數為零,拋出異常
throw new ArithmeticException();
}
return a/b;
}
}
我們來解決第二個問題:
說到單元測試的情況,我們依然可以借用之前說的那句話:
// 我想測 一測:
// 參數傳入
// 我的待測方法里面,
// 得出的結果會不會是:我期待的結果
// 我想測 一測:
// 0作為除數傳入
// 我的除法方法里面,
// 得出的結果會不會是:拋出 java.lang.ArithmeticException異常
按照上一篇的方法建立單元測試:
package com.hui.demo.test;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.hui.demo.Core;
public class CoreTest {
@Test
public void testDivide() {
Core core = new Core();
int result = core.divide(3, 2);
assertEquals(1, result);
}
@Test(expected=ArithmeticException.class)
public void testDivideZero() {
Core core = new Core();
core.divide(2, 0);
}
}
這里重點看這句:
(expected=ArithmeticException.class)
的意思就是說:當我除數為0時候,我期待程序結果是:
拋出 ArithmeticException異常
運行這個測試方法,顯示綠色條,這種情況測試通過。
小張開開心心的把寫好的的除法程序給小李用,沒想到,"噩夢"才剛剛開始......
文章列表