初识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

2BeforeClass是静态的,比较适合加载配置文件,而AfterClass通常用来对资源的清理,如关闭数据库的链接

3Beforeafter会在每个测试方法的前后各执行一次

 

 

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、更改默认的测试运行器为RunWithParameterized.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;

}

}

原创粉丝点击