学习JUnit单元测试

来源:互联网 发布:电脑编程专家的微视频 编辑:程序博客网 时间:2024/06/05 02:14

一、简介

1、JUnit是一个Java编程语言编写的单元测试框架。JUnit促进“先测试再编码”,它强调建立测试数据的一段代码可以被测试,先测试再编码实现的想法。JUnit是用于编写和运行可重复的自动化测试的开源测试框架, 这样可以保证我们的代码按预期工作。

2、JUnit提供:断言测试预期结果、测试功能共享通用的测试数据、测试套件轻松地组织和运行测试、图形和文本测试运行。

3、JUnit用于测试:整个对象、对象的一部分 - 交互的方法或一些方法、几个对象之间的互动(交互)。

4、JUnit特点

(1)JUnit是用于编写和运行测试的开源框架。

(2)提供了注释,以确定测试方法。

(3)提供断言测试预期结果。

(4)提供了测试运行的运行测试。

(5)JUnit测试可以更快地编写代码,提高质量

(6)JUnit测试可以自动运行,检查自己的结果,并提供即时反馈。没有必要通过测试结果报告来手动梳理。

(7)JUnit测试可以组织成测试套件包含测试案例,甚至其他测试套件。

(8)Junit显示测试进度的,如果测试是没有问题条形是绿色的,测试失败则会变成红色。

二、JUnit注解

1、@Test

public void method()

测试注释指示该公共无效方法它所附着可以作为一个测试用例。把一个方法标记为测试方法,自动被执行。

@Test有两个属性:excepted用来测试异常,timeout用来测试性能。

2、@Before
public void method()Before

注释表示,该方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件。每个测试方法执行前自动调用一次。

3、@BeforeClass
public static void method()BeforeClass

注释指出这是附着在静态方法必须执行一次并在类的所有测试之前。发生这种情况时一般是测试计算共享配置方法(如连接到数据库)。在测试类还没有实例化就已经被加载,只执行一次。

4、@After
public void method()After 

注释指示,该方法在执行每项测试后执行(如执行每一个测试后重置某些变量,删除临时变量等)。每个测试方法执行前自动调用一次。

5、@AfterClass
public static void method()

当需要执行所有的测试在JUnit测试用例类后执行,AfterClass注解可以使用以清理建立方法,(从数据库如断开连接)。在测试类还没有实例化就已经被加载,只执行一次。

6、@Ignore
public static void method()

当想暂时禁用特定的测试执行可以使用忽略注释。每个被注解为@Ignore的方法将不被执行。

三、JUnit断言

1、void assertEquals([String message], expected value, actual value)

断言两个值相等。值可能是类型有 int、short、long、 byte、 char、java.lang.Object。 第一个参数是一个可选的字符串消息。如果比较的两个对象是相等的,此方法返回正常,否则失败显示在JUnit窗口的测试将中止。

2、void assertTrue([String message], boolean condition)

断言一个条件为真。测试if条件或变量是true还是false。

3、void assertFalse([String message],boolean condition)

断言一个条件为假。测试if条件或变量是true还是false。

4、void assertNotNull([String message], java.lang.Object object)

断言一个对象不为空(null)。测试一个变量是否为空。

5、void assertNull([String message], java.lang.Object object)

断言一个对象为空(null)。测试一个变量是否为空。

6、void assertSame([String message], java.lang.Object expected, java.lang.Object actual)

断言两个对象引用相同的对象。测试两个对象引用指向完全相同的对象。

7、void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual)

断言两个对象不是引用同一个对象。测试两个对象引用指向完全相同的对象。

8、void assertArrayEquals([String message], expectedArray, resultArray)

断言预期数组和结果数组相等。数组的类型可能是 int、long、short、char、byte、ava.lang.Object。比较两个数组,如果相等方法继续进行,否则失败将显示在JUnit窗口和中止测试。

四、创建套件测试

1、测试套件是一些测试不同类用例,可以使用@RunWith和@Suite注解运行所有东西在一起。

2、当一个类被注解为@RunWith, JUnit 将调用被在其中注解,以便运行测试类,而不使用内置的 JUnit 运行方法。

3、使用@ Suite.SuiteClasses注解,你可以定义测试类,将被列入执行。

五、创建参数化测试

若一个测试类满足下列要求,可被看作是一个参数化测试类:

1、该类被注解为 @RunWith(Parameterized.class)。

2、@RunWith 注解让JUnit来调用其中的注释来运行测试类,代替使用内置的JUnit运行器,Parameterized 是一个在JUnit内的运行器将运行相同的测试用例组在不同的输入。

3、这个类有一个构造函数,存储测试数据。

4、这个类有一个静态方法生成并返回测试数据,并注明@Parameters注解。

5、这个类有一个测试,它需要注解@Test到方法。

六、JUnit测试规则

1、允许非常灵活在测试类重新定义每个测试方法的行为。

2、@Rule注解被使用来标出测试类的公共字段。这些字段类型为MethodRule,这是测试方法如何运行并报告。多个MethodRules可以应用到一个测试方法。

3、MethodRule接口有很多的实现,如ErrorCollector在发现了第一个问题之后,也允许继续执行一个测试,ExpectedException 允许在测试规范预期的异常类型和消息,TestName 使得目前的测试名称在测试方法内部可用。

4、除了那些已经定义的规则,开发人员可以创建自己的自定义规则,并使用来测试自己用例。

七、实例1

1、新建项目--->右键项目名--->properties--->Java Build Path--->Add Library--->JUnit--->JUnit 4--->finish。

2、目录结构



3、代码

package com.junit;public class Calculate {public int sum(int var1, int var2) {System.out.println("相加的值是: " + var1 + " + " + var2);return var1 + var2;}}
package com.junit;import static org.junit.Assert.*;import org.junit.Test;public class CalculateTest {Calculate calculation = new Calculate();int sum = calculation.sum(2, 5);int testSum = 7;@Test//指示该公共无效(public void)方法它所附着可以作为一个测试用例public void testSum() {  //testSum()方法用于测试sum()方法System.out.println("@Test sum(): " + sum + " = " + testSum);assertEquals(sum, testSum);  //断言这两个对象相等}}
4、运行结果