JavaSE进阶—— Junit测试单元
JavaSE进阶——该篇主要讲解Java中的Junit测试单元框架
在开发中,通常一个类中会书写很多方法
一个项目中,会书写很多类
方法即功能。开发完成功能后,想要测试功能
Junit单元测试
Junit4单元测试概述
- 单元测试就是编写测试代码,可以准确、快速地保证程序的正确性,Junit是Java单元测试的框架。
JUnit4可以通过注解的方式来标记方法 , 让方法存某种意义 ,常见的注解有:
- @BeforeClass 全局只会执行一次,而且是第一个运行(标记的方法需要是一个静态无参无返回值方法)
- @Before 在测试方法运行之前运行(非静态无参无返回值方法)
- @Test 测试方法(此方法必须是非静态无参无返回值方法), 主要用于测试的方法
- @After 在测试方法运行之后运行(非静态无参无返回值方法)
- @AfterClass 全局只会执行一次,而且是最后一个运行(标记的方法需要是一个静态无参无返回值方法)
- @Ignore 忽略此方法
Junit的基本使用
- 已知存在需要测试的类Calculator ,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。
1 | // 计算器类 |
生成Junit测试框架
使用IDEA能够直接给需要测试的类生成测试框架,如下:
选中本类任何位置右键选择 Generate(Alt+Insert)/ go to 选项 , 选择Test…
选择需要进行测试的方法
在上一步OK后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。
你只需要将这些测试用例稍作修改即可使用,完整的CalculatorTest代码如下:
1
限时测试
对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些预防措施。限时测试是一个很好的解决方案。我们给这些测试函数设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。要实现这一功能,只需要给@Test标注加一个参数即可,代码如下:
被测方法:
1
2
3
4public void squareRoot(int n) {
//Bug : 死循环
for (; ; ) ;
}测试方法:
1
2
3
4
5
6
// Timeout参数表明了你要设定的时间,单位为毫秒,因此1000就代表1秒。
public void squareRoot() {
calculator.squareRoot(4);
assertEquals(2 , calculator.getResult());
}
断言
预先判断某个条件一定成立,如果条件不成立,则直接报错。