【助教】关于单元测试(二)
故事还在继续......
小张童鞋写的程序一直未报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 国际」许可协议进行许可。
你可以在这里自定义其他内容
本文来自博客园,作者:Grey Zeng,转载请注明原文链接:https://www.cnblogs.com/greyzeng/articles/4443160.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程