滚滚向前滚

导航

 

目录

一、Junit概念

        Junit是java语言单元测试框架,在java程序中,一个工作单元通常是指一个方法,那么单元测试也就是对一个方法进行测试,程序员一般通过Junit来完成自己代码的一个功能测试,所以单元测试又可以叫做程序员测试,如果测试人员在熟悉方法逻辑及其实现的情况下,也可以写Junit单元测试来进行接口测试,即白盒测试。

二、 Junit测试环境搭建

2.1 一点概念

市面上比较流行的服务器: tomcat(war)jboss(ear)weblogic

用的比较多的项目构建工具: antmaven:可以在线管理项目的依赖

2.2 导入Jar包的方式搭建Junit测试环境

注: maven中央仓库网址

  1. 创建一个普通的maven项目所需要的依赖包以及其对应的下载地址
  2. junit-4.11.jar
  3. hamcrest-core-1.3
  4. 之后添加项目的依赖项即可完成一个maven项目的创建(Jar文件)

2.3 创建Maven项目的方式搭建Junit测试环境

  1. 创建一个maven project
  2. 在pom.xml里面添加一个junit依赖

2.3.1 具体步骤

  1. 创建maven项目
  2. 修改pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.maven</groupId>
  <artifactId>JunitTest02</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!--  以下是添加的代码-->
  <dependencies>
	  <dependency>
	  	<groupId>junit</groupId>
	  	<artifactId>junit</artifactId>
	  	<version>4.11</version>
	  </dependency>
  </dependencies>
  <!--  添加代码结束-->
  
</project>

添加依赖后结果展示

三、 创建一个测试用例

3.1 注意事项

  1. src/test/java下新建Package,用于编写测试用例
  2. 所有编写的测试类都继承自junit.framework.TestCase
  3. 测试类中所有的方法均需要以test开头
package com.junit.exam01;

import junit.framework.TestCase;

// 所有编写的测试类都继承自junit.framework.TestCase
public class Example01 extends TestCase{
    // 测试类中所有的方法均需要以test开头
	public void testExam01(){
		System.out.println("this is the first case");
	}
	
	public void testExam02() {
		System.out.println("This is the second case");
	}
}
  1. 可以使用注解的方式(装饰器)来标注test方法(@Test,此时测试方法不必以test开头,也不必继承TestCase
package com.junit.exam01;

import org.junit.Test;

public class DecoExam{
	// 以使用**注解**的方式来标注test方法此时测试方法不必以test开头
	@Test
	public void DecoExamA() {
		System.out.println("This is test A");
	}
	
	@Test
	public void DecoExamB() {
		System.out.println("This is test B");
	}
}

四、 注解详解

4.1 @Test

4.2 @Before

在所有的测试方法执行之前执行一次

package com.junit.exam01;

import org.junit.Before;
import org.junit.Test;

import junit.framework.TestCase;

// 注意一下,用继承的方式before注解不管用了
public class DecoExamBefore{
	@Before
	public void funcBefore() {
		System.out.println("This is Before");
	}
	
	@Test
	public void DecoExamA() {
		System.out.println("This is test A");
	}
	
	@Test
	public void DecoExamB() {
		System.out.println("This is test B");
	}
}

Before注解案例

4.3 @After

在所有的测试方法执行之后执行一次

package com.junit.exam01;

import org.junit.After;
import org.junit.Test;

public class DecoExamAfter {
	@After
	public void funcBefore() {
		System.out.println("This is After");
	}
	
	@Test
	public void DecoExamA() {
		System.out.println("This is test A");
	}
	
	@Test
	public void DecoExamB() {
		System.out.println("This is test B");
	}
}

After注解案例

4.4 @BeforeClass和@AfterClass

用BeforeClass注解的方法在类加载的时候首先被执行一次

package com.junit.exam01;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class DecoExamClassBefore2After {
	
	private int result = 0;
	
	// 使用BeforeClass和AfterClass注解需要使用static关键字
	@BeforeClass
	public static void beforeExam() {
		System.out.println("This is class before");
	}
	
	@AfterClass
	public static void adterExam() {
		System.out.println("This is class after");
	}
	
	@Test
	public void examA() {
		System.out.println("This is ExamA");
	}
	
	@Test
	public void examB() {
		System.out.println("This is ExamB");
	}
}

BeforeClass和AfterClass案例

五、断言

5.1 基础介绍

  1. assertEquals(a, b)

        判断两个数据是否一致,如果一致则表示测试通过,否则表示测试不通过,抛出断言错误

  1. assertNotEquals(a, b)

        判断两个数据是否不一致,如果不一致则表示测试通过,否则表示测试不通过,抛出断言错误

  1. assertNull(...)

        判断某数据是否为空,如果为空,则测试通过,否则抛出断言错误

  1. assertNotNull(...)

        判断某数据是否为空,如果不为空,则测试通过,否则抛出断言错误

  1. assertFalse(...)

        判断某数据是否为真,如果为假,则表示测试通过,否则抛出断言错误

  1. assertTrue(...)

        判断某数据是否为真,如果为真,则表示测试通过,否则抛出断言错误

5.2 案例

package com.junit.exam01;
import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;

import com.junit.calc.CalcExam;

import junit.framework.Assert;

public class DemoTestCalc {
	private CalcExam calc;
	
	@Before
	public void InitCalc() {
		calc = new CalcExam();
	}
	
	@Test
	public void add() {
		calc.add(3);
		int result = calc.getResult();
		System.out.println("实际结果为:" + result);
		Assert.assertEquals(3, result);
	}
	
	@Test
	public void sub() {
		calc.sub(3);
		int result = calc.getResult();
		System.out.println("实际结果为:" + result);
		Assert.assertEquals(-3, result);
	}
	
	@Test
	public void multi() {
		calc.multi(3);
		int result = calc.getResult();
		System.out.println("实际结果为:" + result);
		Assert.assertEquals(0, result);
	}
	
	@Test
	public void div() {
		calc.div(3);
		int result = calc.getResult();
		System.out.println("实际结果为:" + result);
		Assert.assertEquals(0, result);
	}
	
}

//***************************************************************************************************//
// 以下是Clac类的内容
package com.junit.calc;

public class CalcExam {
	private int result = 0;
	
	public void add(int a) {
		result += a;
	}
	
	public void sub(int a) {
		result -= a;
	}
	
	public void div(int a) {
		if (a == 0) return;
		result /= a;
	}
	
	public void multi(int a) {
		result *= a;
	}
	
	public int getResult() {
		return this.result;
	}
}
//----------------------------------------------------------------------------------------------------//

六、 Junit打包(测试集实现)

        要实现测试集的功能需要使用一个特殊的Runner,因此我们需要向@RunWith标注中传递一个参数Suite.class(即 @RunWith (Suite.class) )。同时,我们还需另一个标注@SuiteClasses用以表明这个类是一个打包测试类,基本语法为 @SuiteClasses({... , ... , ...}) ,其中的参数为需要测试的类
有了上述两个标注之后,就已经完整的表达了所有的含义,因此下面的类已经无关紧要,内容为空即可

package com.junit.exam01;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

// 固定写法,传递参数Suite.class
@RunWith(Suite.class)

// 将要测试的类写到里面
@SuiteClasses({
    // 由于用到的测试类都在同一个包中也不需要额外打包
	DemoTestCalc.class,
	DecoExamAfter.class,
	DecoExamBefore.class,
	DecoExamTest.class,
	DecoExamClassBefore2After.class
})

// 这个类为空即可,但是必须保留
public class DemoTestSuite {

}

测试结果

posted on 2018-05-09 18:00  滚滚向前滚  阅读(196)  评论(0编辑  收藏  举报