文章出處

故事還在繼續......

小張童鞋寫的程序一直未報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異常

運行這個測試方法,顯示綠色條,這種情況測試通過。

小張開開心心的把寫好的的除法程序給小李用,沒想到,"噩夢"才剛剛開始......


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()