Junit单元测试总结
Junit Test
Junit test学习笔记
视频链接:
Java教程 - Part-8-JUnit单元测试
文章目录
- Junit Test
- 单元测试
- 什么是单元测试
- 测试驱动开发(TDD)
- 单元测试好处
- JUnit介绍
- 使用Main方法测试的缺点
- JUnit特点
- JUnit的设计
- JUnit使用
- 使用 Assert断言
- 使用Before和After
- 使用@Before和@After
- 使用@BeforeClass和@AfterClass
- Junit Fixture
- 异常测试
- 参数化测试
- 超时测试
单元测试
什么是单元测试
- 单元测试是针对最小功能单元编写测试代码
- 由于JAVA最小功能单元是方法,因此单元测试是针对于单个JAVA方法的测试
测试驱动开发(TDD)
写代码前先写测试
单元测试好处
确保单个方法运行正常
若修改了方法代码,只需确保其对应的单元测试通过
测试代码本身可以作为示例代码
自动化运行所有测试,获得报告
JUnit介绍
针对JAVA语言的单元测试框架,开源(标准单元测试框架)
使用Main方法测试的缺点
只有一个main方法,不能将测试代码分离
没有打印出测试结果和期望结果
因此需要一种测试框架来辅助测试
JUnit特点
- 使用断言(Assertion)测试期望结果
- 可以方便地组织,运行测试并查看结果
- 常用IDE(Eclipse, IDEA)都集成了JUnit
- 可以方便地集成到Maven
JUnit的设计
- TestCase:一个TestCase表示一个测试
- TestSuite:一个TestSuite包含一组TestCase,表示一组测试
- TestFixture:一个TestFixture表示一个测试环境
- TestResult:用于收集测试结果
- TestRunner:用于运行测试
- TestListener:用于监听测试过程,收集测试数据
- Assert:用于断言测试结果是否准确
编写JUnit测试程序时,只需要关注 TestCase 和 Assert 即可
JUnit使用
使用 Assert断言
需要导入Assert类:
import static org.junit.Assert.*;
常用方法:
assertEquals(100,x)//断言相等 assertNotEquals(100,x)//断言不相等 assertArrayEquals({1,2,3},x)//断言数组相等 assertEquals(3.1416,x,0.0001)//浮点数断言相等,其中0.0001为可接受的误差范围 assertNull(x)//断言为null assertNotNull(x)//断言不为null assertTrue(x>0)//断言为true assertFalse(x>0)//断言为false
测试要点:
- 一个TestCase包含一组相关的测试方法
- 使用Assert断言测试结果
- 每个测试方法必须互相独立,测试代码必须简单
- 不能为测试代码再编写测试
- 测试须覆盖各类输入条件,特别是边界条件
使用Before和After
使用@Before和@After
在同一个单元测试中包含多个测试方法,测试前后可能都需要额外的操作来初始化或释放对象
JUnit中使用
@Before
和@After
注解来完成上述工作public class XXXTest{//xxxxxx@Beforepublic void SetUp(){//初始化资源}@Afterpublic void TearDown{//释放资源}//xxxxxx }
Junit对于每个
@Test
测试方法:- 实例化测试类
- 执行
@Before
方法 - 执行
@Test
方法 - 执行
@After
方法
因此,使用
@Before
和@After
可以保证:- 单个
@Test
方法执行前会创建新的XxxTest实例,实例变量状态不会传入进下一个@Test
方法 - 每个
@Test
方法执行前后都会执行@Before
方法和@After
方法
使用@BeforeClass和@AfterClass
Junit提供了@BeforeClass
和@AfterClass
静态方法:
- 在执行所有
@Test
方法前执行@BeforeClass
静态方法 - 执行所有测试
- 在执行所有
@Test
方法后执行@AfterClass
静态方法
注意要点:
@BeforeClass
静态方法初始化的对象只能存放于静态字段中- 使用静态字段的对象测试,其状态会影响到所有的
@Test
方法
JUnit执行逻辑:
invokeBeforeClass(XXTest.class);//@BeforeClass
for (Method testMethod : findTestMethods(XXTest.class)){XXTest test = new XXTest();//newtest.SetUp();//@BeforetestMethod.invoke(test);//@Testtest.TearDown();//@After
}
invokeAfterClass(XXTest.class);//@AfterClass
Junit Fixture
初始化测试资源称作Fixture
- @Before: 初始化测试对象,例如input = new FileInputStream();
- @After: 销毁@Before创建的测试对象,例如input.close();
- @BeforeClass: 初始化非常耗时的资源,例如创建数据库
- @AfterClass: 清理@BeforeClass创建的资源,例如删除数据库
异常测试
对可能抛出的异常进行测试
异常本身是方法签名的一部分
public static int parseInt(String s) throws NumberFormatException
测试错误的输入是否导致特定的异常
如何测试异常?
使用try-catch捕获异常,若没有捕获异常,则使用Junit提供的
fail()
来表示测试失败在注解中,使用
expected
标注来测试异常@Test(expected = NumberFormatException.class) public void testNumberFormatException(){Integer.parseInt(null); }
参数化测试
如果待测试的输入和输出是一组数据:
- 可以把测试数据组织起来
- 用不同的测试数据调用相同的测试方法
参数化测试要求:
参数必须由静态方法
data()
返回返回类型为
Collection<Object[]>
静态方法必须标记为
@Parameters
测试类必须标记为
@RunWith(Parameterized.class)
构造方法参数必须和测试参数相对应
@RunWith(Parameterized.class)
public class AbsTest{@Parameterspublic static Collection<?> data(){return Arrays.asList(new Object[][]{{0,0},{1,1},{-1,1}});}int input;int expected;//构造方法public AbsTest(int input,int expected){this.input = input;this.expected = expected;}@Testpublic void testAbs(){int r = Math.abs(this.input);assertEquals(this.expected,r);}
}
超时测试
可以为JUnit的单个测试设置超时
@Test(timeout = 1000)//单位是毫秒
注:超时测试并不能取代性能测试和压力测试
Junit单元测试总结相关推荐
- Controller、Service、Dao进行Junit单元
原文链接:http://blog.csdn.net/u013041642/article/details/71430293 Spring对Controller.Service.Dao进行Junit单元 ...
- 【Android进阶】Junit单元測试环境搭建以及简单有用
单元測试的目的 首先.Junit单元測试要实现的功能,就是用来測试写好的方法是否可以正确的运行,一般多用于对业务方法的測试. 单元測试的环境配置 1.在AndroidManifest清单文件的Appl ...
- JUnit单元测试用例
2019独角兽企业重金招聘Python工程师标准>>> 注意在编写测试用例的时候,要保持测试用例的独立性 一个原则,每条单元测试用例都必须独立运行,不能依靠其他测试用例,或者不能按照 ...
- java单元测试总结
java单元测试(使用junit) http://www.cnblogs.com/feiweiwei/archive/2009/06/16/1024623.html JUnit是由 Erich ...
- 新手小白学JAVA JUnit单元测试方法
JUnit单元测试 1.前言 之前我们去运行程序只能通过main(),也就是程序的主函数来运行,那么就会出现这样的问题:我们如果想要测试,就需要运行main()中所有的代码,这会导致,本来我们只是想测 ...
- 教你快速写出多线程Junit单元测试用例 - GroboUtils
摘自: http://mushiqianmeng.blog.51cto.com/3970029/897786/ 本文出自One Coder博客,转载请务必注明出处: http://www.coderl ...
- 软件测试第二次作业:JUNIT单元测试方法
单元测试:最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程字设计和编码的细节. JUnit :是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.他是用于单元 ...
- IDEA 导入Junit.jar 包 ,使用 Junit 单元测试过程
一.IDEA中,导入 Junit.jar 包 1.File-->Project Structure-->Modules-->右侧Dependencies-->+号-->J ...
- 单元测试总结反思_语文单元考试反思
语文单元考试反思 导语:在语文单元考试之后,我们首先要做好的就是写好考试反思,以下是小编为大家整理的语文单元考试反思,欢迎大家阅读与借鉴! 语文单元考试反思(1) 这次的语文考试中最大的问题和以前一样 ...
最新文章
- Mysq表的创建和l数据类型
- IDEA配置SVN并实现代码版本控制
- java中String的比较符
- vscode配置live-server转发代理
- 利用Python Matplotlib库做简单的视觉化(2)
- 查看现有运行的linux服务器有多少内存条
- 数组及对象几种遍历方式对比
- intouch的报警怎么发到微信上
- pyhive 安装测试及问题解决
- 有关session安全的那些事儿
- Indented Inventory BOM如何转为最终的单层采购BOM
- 游戏思考11:游戏服务器类型简单分类(有服务器的会讲的详细一点)
- 基于libVLC的视频播放器之五:抽帧
- 基因组注释2. 非编码基因和编码基因预测tRNAScan-SE、rRNAmmer和Prodigal
- Bluecoat代理设备维护手册
- 基于python爬虫下载网站在线视频
- 前端框架系列之(mvp)
- 利用Exchange服务同步iOS和android中的联系人
- Mysql 安装PMM监控 (一台主机安装)
- 2021年全球支付现状及发展趋势分析:亚太电子商务数字支付将超过3.1万亿美元[图]