【助教】关于单元测试(二)
故事还在继续......
小张童鞋写的程序一直未报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异常
运行这个测试方法,显示绿色条,这种情况测试通过。
小张开开心心的把写好的的除法程序给小李用,没想到,"噩梦"才刚刚开始......
本文来自博客园,作者:Grey Zeng,转载请注明原文链接:https://www.cnblogs.com/greyzeng/articles/4443160.html