Java进阶7:Junit单元测试
Junit单元测试
什么是单元测试
- 单元测试是针对最小功能单元编写测试代码
- Java最小的功能单元是方法
- 单元测试就是针对单个Java方法的测试
测试驱动开发TDD
- 示例:计算阶乘
- 可以直接编写一个main方法来调用方法进行测试等
- 使用main方法测试的缺点
- 只有一个main方法,不能把测试代码分离
- 没有打印出测试结果和期望结果
- 需要一种测试框架来辅助我们编写测试
单元测试的好处
- 确保单个方法正常
- 自动化,获得所有的报告
- 如果修改了对应的方法,只需要确保对应测试单元通过
- 代码本身就可以作为示例代码
Junit
- 专门针对Java设计的框架
- 标准的单元测试框架
- 使用断言测试结果
- 方便测试、查看结果
- 便于集成到其他的框架和环境中,例如IDEA工具
Junit的测试
- TestCase: 一个TestCase表示一个测试
- TestSuite: 一个TestSuite包含一组TestCase,表示一组测试
- TestFixture: 一个TestFixture表示一个测试环境
- TestResult: 用于收集测试结果
- TestRunner: 用于运行测试
- TestListener: 用于监听测试过程,收集测试数据
- Assert: 用于断言测试结果是否正确
定义两个方法进行单元测试
- 这里定义了两个方法
- IDEA集成了jUnit框架,因此不需要进行手工导入
- 需要为测试的业务类编写对应的测试方法,方法必须公共、无参、无返回值
- 测试方法使用@Test注解,然后调用测试代码进行测试
- 选中测试方法开始运行,以进行测试,如果测试通过那么会变成绿色,否则就是红色
测试的一般步骤
- 新增StringUtilTest.java
-
编写测试类
-
在测试方法添加上@Test注解,每定义一个测试方法,都需要使用@Test注解进行批注。
- 调用测试方法来启动测试
- 启动测试
- 查看测试结果的输出
- 如果测试通过,并不代表方法的逻辑没有问题,可能是编写的测试方法水平不够导致没有能够测试出方法的bug,还需要结合实际来观察结果。
- 因为在Junit中,他认为只要没有出现异常,就一定测试通过。
断言机制
- 通过断言机制,可以让程序员输入期望的结果,从而确认到底是否存在bug
- 比如这里期望得到4,如果不是4,就报错
- 测试的结果如下
自动化测试
- Junit测试可以直接整体运行测试类。
- 通过测试类可以实现一键自动化测试。
- 直接选择项目,RunAllTest来运行所有的测试类。
常用注解
- Junit的常用注解
- @Before,在每一个测试方法执行前触发
- @After,在每个测试方法之后执行一次
- @BeforeClass和@AfterClass,分别在所有测试方法之前和之后只执行一次,注解修饰静态方法