JUnit单元测试框架详解

什么是JUnit?
  • JUnit 是一个Java编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,起源于xUnit 的单元测试框架
  • JUnit 是一个开放的资源框架(回归测试框架),用于编写和运行测试
  • JUnit 提供注释来识别测试方法;提供断言来测试预期结果
  • JUnit 优雅简洁;测试可以自动运行并且检查自身结果并提供即时反馈
  • JUnit 测试可以被组织为测试套件,包含测试用例,甚至其他的测试套件
  • JUnit 在一个条中显示进度。如果运行良好则是绿色;如果运行失败,则变成红色
环境依赖
  • 官网下载所需jar包
  • 使用Maven(项目管理工具)导入依赖(自动下载导入,便捷)
 	<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.9</version>
			<scope>test</scope>
	</dependency>
断言
  • 所有的断言都包含在 Assert 类中public class Assert extends java.lang.Object

  • void assertEquals(boolean expected, boolean actual)检查两个变量或者等式是否平衡

  • void assertTrue(boolean expected, boolean actual)检查条件为真

  • void assertFalse(boolean condition)检查条件为假

  • void assertNotNull(Object object)检查对象不为空

  • void assertNull(Object object)检查对象为空

  • void assertSame(boolean condition):assertSame() 方法检查两个相关对象是否指向同一个对象

  • void assertNotSame(boolean condition):assertNotSame() 方法检查两个相关对象是否不指向同一个对象

  • void assertArrayEquals(expectedArray, resultArray):assertArrayEquals() 方法检查两个数组是否相等

  • 测试实例
    Assertion.java

package com.me;

public class Assertion {
	public int add(int a,int b) {
		return a+b;
	}
	public int sub(int a,int b) {
		return a-b;
	}
}

测试类AssertTest.java

package com.me;

import org.junit.Test;
import com.me.Assertion;
import junit.framework.Assert;

/**
 * 断言测试
 */
public class AssertTest {
	@Test
	public void testAdd() {
		Assertion assertion = new Assertion();
		int result = assertion.add(2, 3);
		// 断言
		Assert.assertEquals(5, result);// 测试成功
		// Assert.assertEquals(3, result);//测试错误
	}
	@Test
	public void testSub() {
		Assertion c = new Assertion();
		int result = c.sub(2, 3);
		// 断言
		// Assert.assertEquals(-1, result);//测试成功
		Assert.assertEquals(-2, result);// 测试错误
	}
}

断言成功为绿色:JUnit单元测试框架详解_第1张图片
断言错误为红色:JUnit单元测试框架详解_第2张图片

注释
  • @Test 依附在 JUnit 的 public void 方法可以作为一个测试案例
  • @Before 有些测试在运行前需要创造几个相似的对象;在 public void 方法加该注释是因为该方法需要在 test 方法前运行
  • @After将外部资源在 Before 方法中分配,需要在测试运行后释放。在 public void 方法加该注释是因为该方法需要在 test 方法后运行
  • @BeforeClass 在 public void 方法加该注释是因为该方法需要在类中所有方法前运行
  • @AfterClass 它将会使方法在所有测试结束后执行。这个可以用来进行清理活动
  • @Ignore 用来忽略有关不需要执行的测试
执行过程
  • beforeClass() 方法首先执行,并且只执行一次
  • afterClass() 方法最后执行,并且只执行一次
  • before() 方法针对每一个测试用例执行,但是是在执行测试用例之前
  • after() 方法针对每一个测试用例执行,但是是在执行测试用例之后
  • before() 方法和 after() 方法之间,执行每一个测试用例

测试实例(为清楚体现执行顺序,特意把 @Before放在后面)

package com.me;

import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

/**
 * 执行顺序(注释)测试
 */
public class AnnotateTest {

	@Test
	public void testTest() {
		System.out.println("@Test不紧不慢");
	}

	@After
	public void testAfter() {
		System.out.println("@After后执行");
	}

	@Before
	public void testBefore() {
		System.out.println("@Before先执行");
	}
	@Ignore
	public void testIgnore() {
		System.out.println("@Ignore忽略我吧");
	}
}

运行结果:
在这里插入图片描述

参数化测试

Junit 4引入了一个新的功能参数化测试。参数化测试允许开发人员使用不同的值反复运行同一个测试(一旦每一行数据出现测试用例将被调用)

  • @RunWith(Parameterized.class) 来注释 test 类
  • 创建一个由 @Parameters 注释的公共的静态方法,它返回一个对象的集合(数组)来作为测试数据集合
  • 创建一个公共的构造函数,它接受和一行测试数据相等同的东西
  • 为每一列测试数据创建一个实例变量
  • 用实例变量作为测试数据的来源来创建你的测试用例

你可能感兴趣的:(单元测试,junit)