Loading

【助教】关于单元测试(二)

故事还在继续......

小张童鞋写的程序一直未报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异常

运行这个测试方法,显示绿色条,这种情况测试通过。

小张开开心心的把写好的的除法程序给小李用,没想到,"噩梦"才刚刚开始......

作者:GreyZeng

出处:https://www.cnblogs.com/greyzeng/articles/4443160.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

你可以在这里自定义其他内容

posted @   Grey Zeng  阅读(644)  评论(4编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up light_mode palette
选择主题