关于JUnit
目录
一、单元测试
二、在LAB中的常用方法
一、单元测试
什么是单元测试呢?单元测试就是针对最小的功能单元编写测试代码。Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。
单元测试有什么好处呢?在学习单元测试前,我们可以先了解一下测试优先的编程。
所谓测试优先的编程,是指先编写接口,紧接着编写测试。编写完测试后,我们才开始真正编写实现代码。在编写实现代码的过程中,一边写,一边测,什么时候测试全部通过了,那就表示编写的实现完成了:

这就是TDD(Test-driven development)
那么我们为什么要单独编写测试代码,而不是像学c语言的时候一样,在main()中输出,观察结果是否是自己想要的呢?因为这有以下的缺点:
1. 只有一个main()函数,不能把测试代码分离
2. 没有输出测试结果和期望结果,只能和自己记在本本上的数据进行比对
3. 很难编写一组通用的代码
Java给出了用于测试的框架,也就是JUnit。
JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。JUnit是事实上的单元测试的标准框架,任何Java开发者都应当学习并使用JUnit编写单元测试。
使用JUnit编写单元测试的好处在于,我们可以非常简单地组织测试代码,并随时运行它们,JUnit就会给出成功的测试和失败的测试,还可以生成测试报告,不仅包含测试的成功率,还可以统计测试的代码覆盖率,即被测试的代码本身有多少经过了测试。对于高质量的代码来说,测试覆盖率应该在80%以上。
二、在LAB中的常用方法
上一个博客已经给出如何使用JUnit功能,这次来说说需要掌握哪些知识可以应对LAB。
一个测试方法的代码大概应该是这样的
import static org.iunit.Assert.*;
import org.junit.Test;
public class FactorialTest {
@Test
public void factTest() {
assertEquals(1, Factorial.fact(1));
assertEquals(2, Factorial.fact(2));
assertEquals(6, Factorial.fact(3));
assertEquals(3628800, Factorial.fact(10));
assertEquals(2432902008176640000L, Factorial.fact(20));
}
}
命名一般都是对应方法和类名后面加Test,必须是public void,测试方法前要加注解@Test,表明这是测试方法。
assertEquals(expected, actual)
是最常见的方法,用来比较返回值和期望值是否相同。还有其他方法,比如
assertEqual(a,b,[msg='测试失败时打印的信息']) // 断言a和b是否相等,相等则测试用例通过。 assertNotEqual(a,b,[msg='测试失败时打印的信息']) //断言a和b是否相等,不相等则测试用例通过。 assertTrue(x,[msg='测试失败时打印的信息']) //断言x是否True,是True则测试用例通过。 assertFalse(x,[msg='测试失败时打印的信息']) //断言x是否False,是False则测试用例通过。 assertIs(a,b,[msg='测试失败时打印的信息']) //断言a是否是b,是则测试用例通过。 assertNotIs(a,b,[msg='测试失败时打印的信息']) //断言a是否是b,不是则测试用例通过。 assertIsNone(x,[msg='测试失败时打印的信息']) //断言x是否None,是None则测试用例通过。 assertIsNotNone(x,[msg='测试失败时打印的信息']) //断言x是否None,不是None则测试用例通过。 assertIn(a,b,[msg='测试失败时打印的信息']) //断言a是否在b中,在b中则测试用例通过。 assertNotIn(a,b,[msg='测试失败时打印的信息']) //断言a是否在b中,不在b中则测试用例通过。 assertIsInstance(a,b,[msg='测试失败时打印的信息']) //断言a是是b的一个实例,是则测试用例通过。 assertNotIsInstance(a,b,[msg='测试失败时打印的信息']) //断言a是是b的一个实例,不是则测试用例通过。
这些方法都在
org.junit.Assert;
这个包里
使用浮点数时,由于浮点数无法精确地进行比较,因此,我们需要调用
assertEquals(double expected, double actual, double delta)
这个重载方法,指定一个误差值:
assertEquals(0.1, Math.abs(1 - 9 / 10.0), 0.0000001);
关于JUnit的更多相关文章
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- AndroidStudio — Error:Failed to resolve: junit:junit:4.12错误解决
原博客:http://blog.csdn.net/u013443865/article/details/50243193 最近使用AndroidStudio出现以下问题: 解决:打开app下的buil ...
- 「译」JUnit 5 系列:环境搭建
原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...
- [深入JUnit] 测试运行的入口
阅读前提 了解JUnit 对JUnit的内部实现有兴趣 不妨看看[深入JUnit] @Before, @After, @Test的秘密] 代码版本: junit 4.12代码搜索工具: http:// ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- 「译」JUnit 5 系列:架构体系
原文地址:http://blog.codefx.org/design/architecture/junit-5-architecture/ 原文日期:29, Mar, 2016 译文首发:Linesh ...
- 「译」JUnit 5 系列:基础入门
原文地址:http://blog.codefx.org/libraries/junit-5-basics/ 原文日期:25, Feb, 2016 译文首发:Linesh 的博客:JUnit 5 系列: ...
- 新手入门JUnit单元测试
首先将JUnit插件安装到Eclipse或myeclipse里面,编写完一个模块或者实体类的时候,直接右击,new一个JUnit项目,选择你想测试的实体类(模块),然后会自动生成一个类,这个类,我们将 ...
- [Android]使用自定义JUnit Rules、annotations和Resources进行单元测试(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5795091.html 使用自定义JUnit Rules.ann ...
随机推荐
- git命令,回滚上一个版本,回滚n个版本,撤销回滚
1 回滚到上一个版本 git checkout . :add之前的回滚 git reset --hard:add之后,commit之前 git reset --hard origin/test:com ...
- iptables(一)基础概念、filter表常用语法规则
iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...
- TP5 事务处理加锁
首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用,还有,查询的时候都必须带锁,比如: db('sms')->lock(true)->where(['id'=>1])-& ...
- WCF 安全
服务器端与客户端都安装证书,双方通过证书加密通讯. 配置wsHttpBinding,使用基于消息的用户名验证.首先配置为Windows账户库验证. 服务器端配置: <?xml version=& ...
- Mogdb / opengauss 用户密码错误,用户被锁
# 问题概述xxx客户新上一套opengauss数据库,在测试中程序里用户的密码配置错误,导致用户被锁# 解决方案1.跟oracle 语法一样alter user xxx account unlock ...
- css制作仿商城侧边导航
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- window stm32 mcu 调试
1.ARM内核的MCU开发和调试 1.通过keil + jlink(segger) 进行调试 2.通过arm-gdb+openocd+jlink调试 3.通过jtag 进行调试(电路不复杂,硬件只需要 ...
- laravel facebook等第三方授权登录
https://laravelacademy.org/post/9043.html 使用laravel此扩展组件处理 https://developers.facebook.com/apps/?sho ...
- js-模态框的拖动
效果如下: 代码如下: <div class="clickBtn">点击,弹出登录框</div> <div class="login&quo ...
- 学习lua-05,io.open 读取输出修改文件,以及io.read的参数运用,读所有,读一行多行
-- 以附加的方式打开只写文件.若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留.(EOF符保留) file = io.open("D:\\Pr ...