初识junit4
来源:互联网 发布:无损音乐软件 编辑:程序博客网 时间:2024/06/03 15:57
为什么要使用测试工具
①测试框架可以帮助我们对编写的程序进行有目的地测试,帮助我们最大限度地避免代码中的bug,以保证系统的正确性和稳定性。
②很多人对自己写的代码,测试时就简单写main,然后sysout输出控制台观察结果。这样非常枯燥繁琐,不规范。缺点:测试方法不能一起运行,测试结果要程序猿自己观察才可以判断程序逻辑是否正确。
③JUnit的断言机制,可以直接将我们的预期结果和程序运行的结果进行一个比对,确保对结果的可预知性。
创建简单业务类
使用Eclipse创建一个项目,导入JUnit相关包,因为eclipse集成了JUnit框架,所以可以直接右键项目,选择Build Path → 点击Add Libraries → 选择JUnit → 点击Next,选择JUnit版本,然后Finish。(其实也可以下载jar包作为用户库来添加)
创建被测试类:Calculate
public class Calculate {
public int add(int a,int b){
return a+b;
}
public int substract(int a , int b){
return a-b;
}
public int multiple(int a,int b){
return a*b;
}
public int divide(int a,int b){
return a/b;
}
}
创建测试类:CalculateTest (new一个junit test case然后修改类名finish)
public class CalculateTest {
@Test
public void testAdd(){
assertEquals(6, new Calculate().add(3, 3));
}
}
这样就可以run as junit进行测试
完善测试代码,junit4最佳实践
测试代码不应与项目代码放在一起,因为它不应出现在最后的产品中
可以放于与src平行的新建的sourceFolder test中
建议在每个测试方法中加上test
但当需要测试的方法很多时,一个个的敲就不现实。这在创建junit时不点finish而点next可以选择要测试的方法或要测试的所有类方法
注意事项:1、测试方法上必须使用@Test进行修饰(junit4)
2、测试方法必须使用public void 进行修饰 且不能带任何参数
3、新建一个源代码目录来存放我们的测试代码
4、测试类的包应该和被测试类保持一致
5、测试单元中的每个方法必须可以独立测试,测试方法间不能有任何依赖
6、测试类使用test作为方法名前缀(不是必须)
7、测试类使用Test作为类名的后缀(不是必须)
测试失败的两种情况
1、Failure一般由单元测试使用的断言方法判断失败所引起的,这表示测试点发现了问题,就是说程序输出的结果和我们语气的不一样
2、Error是由代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中的一个隐藏的bug,如测试一个除法的方法,给除数设置为0
3、测试用例不是用来证明你是对的,而是用来证明你没有错。测试用例用来达到想要的语气结果,但对于逻辑错误无能为力(例如只能判断你计算的长方形面积是否正确,而不能判断你使用的是长方形面积公式还是周长公式)
junit运行流程(在new junit test case 时会有添加方法的复选框可以添加BeforeClass、Before、、After、AfterClass)
1、依次为BeforeClass、Before、测试代码(如testAdd)、After、AfterClass
2、BeforeClass是静态的,比较适合加载配置文件,而AfterClass通常用来对资源的清理,如关闭数据库的链接
3、Before和after会在每个测试方法的前后各执行一次
Junit中常用注解
1、Test属性Test(expected=ArithmeticException.class)(expected=XX.class)捕获可能抛出的异常 (timeout=毫秒)定义测试代码执行的时间,避免测试时出现死循环问题;也可对性能进行测试,如判断读取文件的时间是否在限定范围内。
2、@Ingore所修饰的测试方法会被测试运行器忽略
3、RunWith可以更改测试运行器org.junit.runner.Runner
可静态导如Assert类静态方法根据api选择想要的断言方法
深入使用
1、junit4测试套件
可以将所有的测试类集合在一个测试套件中,这样每次验证系统功能的时候,只需要执行一次测试套件即可。
如何使用:
·测试套件是一个空类(不包含其他方法),而且是public修饰的
·添加类注解:@RunWith(Suite.class)//更改测试类运行器
@Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class}) 将要测试的类以数组形式传入各测试类的class对象
2、junit4的参数化设置
@RunWith(Parameterized.class)
public class ParameterTest{
//1、更改默认的测试运行器为RunWith(Parameterized.class)
//2、声明变量来存放预期值和结果值
//3、声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰
//4、为测试类声明一个带有参数的公共构造函数,并在其中为之前声明的变量赋值
Int expected = 0;
Int input1 = 0;
Int input2 = 0;
@Parameters
Public static Collection<Object[]> t(){
Return Arrays.asList(new Object[][]{
{3,1,2},{4,2,2}
});
}
Public ParameterTest(int expected,int input1,int input2){
this.expected = expected;
This.input1 = input1;
This.input2 = inpu2;
}
@Test
Public void testAdd(){
assertEquals(expected,new Calculate().add(input1,input2));
}
}
Class Calculate{
Public int add(int a,int b){
Return a+b;
}
}
- 初识junit4
- JUnit4
- JUnit4
- junit4
- junit4
- JUnit4
- junit4
- JUnit4
- JUNIT4
- Junit4
- JUnit4
- junit4
- Junit4
- Junit4
- Junit4
- JUnit4
- JUnit4
- junit4
- Directx9学习(九)碰撞——基于边界和基于距离
- 【Spring】引入(一)
- Java线程技术点与实例
- Mac OS无法进入系统/数据备份/重装系统方法步骤
- Spark打印每个split及其对应文件
- 初识junit4
- RecylerView的使用
- 天天和不可描述
- NSAttributedString分类-计算富文本高度
- zip格式文件伪加密
- gcc命令
- 进程间的通信方式?
- 洛谷p1330 封锁阳光大学-二分图染色
- 教你怎么编写高效的JSON工具类