文章目录

  • junit测试实例
  • 1 创建测试项目
  • 1.1 创建java project
  • 1.2创建测试类
  • 2 编写测试脚本
  • 3 执行测试脚本
  • 3.1 测试通过情况
  • 3.2测试失败情况
  • 4 Errors与Failures的区别
  • 5 JUnit中 常用的注解
  • 6 测试断言
  • 6.1 Assert类的方法
  • 7 Junit中的异常处理
  • 7.1 try/ catch/ finally
  • 7.2 ExpectedException
  • 8 代码覆盖率


junit测试实例

现在的eclipse中已经集成了junit,可以直接创建JUnit项目

1 创建测试项目

1.1 创建java project

创建一个java project,然后在src目录下创建自己的方法类Calculator.java

基于java的系统测试文档_junit

1.2创建测试类

右击JUnitTest项目名,File–>new–>Other–>Java–>JUnit–JUnit Test Case,创建测试类CalculatorTest.java

基于java的系统测试文档_基于java的系统测试文档_02


基于java的系统测试文档_junit_03

2 编写测试脚本

package test;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.DynamicContainer.*;
import static org.junit.jupiter.api.DynamicTest.*;

import java.util.stream.Stream;

import org.junit.jupiter.api.DynamicNode;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestFactory;

class CalculatorTest {

	@Test
	void testAdd() {
		assertEquals(6, new Calculator().add(3, 3));
//		fail("Not yet implemented");
	}
	
	@Test
	void testSubtraction() {
		assertEquals(1, new Calculator().subtraction(4, 3));
//		fail("Not yet implemented");
	}
	
	@Test
	void testMultiplication() {
		assertEquals(12, new Calculator().multiplication(3, 4));
//		fail("Not yet implemented");
	}
	
	@Test
	void testDivision() {
		assertEquals(2, new Calculator().division(6,3));
//		fail("Not yet implemented");
	}
	
	
	使用新的test_jupiter模板创建一个JUnit Jupiter测试方法:
//	@Test
//	void testName() throws Exception {
//		
//	}
//	
	@TestFactory使用新的test_factory模板创建一个方法
//	@TestFactory
//	Stream<DynamicNode> testFactoryName() throws Exception {
//		// TODO: generate dynamic test cases
//	return null;
//	}
}

3 执行测试脚本

跟运行一般的java类一样,右击鼠标,Run As--->1JUnit Test

3.1 测试通过情况

基于java的系统测试文档_eclipse_04

3.2测试失败情况

测试方法:

基于java的系统测试文档_测试_05


运行结果:

基于java的系统测试文档_junit_06


基于java的系统测试文档_eclipse_07

4 Errors与Failures的区别

  • 失败:由于测试用例断言语句中的条件未能得到满足所引发,意味着程序运行状态或运行结果与预期不一致,是主动控制的,可以主观上进行相应修改,使得Failure得到解决。
  • 错误:由于源程序或测试程序中的代码异常所引发,表示程序测试用例运行时产生了导致系统崩溃的、意想不到的错误状态,是预期之外产生的。

5 JUnit中 常用的注解

@BeforeClass、@AfterClass、@Before、@After、@Test、@lgnore等,他们规定了每个测试用例的运行次序,即@BeforeClass--->@Before--->@Test--->@After--->@AfterClass从而确定了整个测试流程。

  • @BeforeClass所注解的方法是JUnit测试时首个被运行的方法,且只被运行一次@BeforeClass所注解的方法必须是static void类型,通常会涉及复杂的计算和预处理任务,如连接数据库等。
  • @AfterClass所注解的方法是JUnit测试时最后一个被运行的方法,且只被运行一次@AftcrClass所注解的方法必须是static void``类型,通常会涉及资源释放相关任务,如关闭数据库等。
  • @Before所注解的方法在每个测试用例运行之前运行,通用用于初始化测试用例所需的资源
  • @After所注解的方法在每个测试用例运行之后运行,通用用于释放@Before所注解的方法打开的资源
  • 需要注意的是,当@Test或@Before所注解的方法发生异常时,@After所注解的方法仍会被运行。
  • @Test所注解的方法被称为测试用例,包含了源程序的测试代码。@Test注解包含expected和timeout两个可选参数。
  • expected表示测试用例运行后应该抛出的异常;
  • timeout表示测试方法的运行时间。为避免程序测试时陷入死循环或运行时间过长,可以通过timeout来限制测试用例运行时间
  • @lgnore所注解的方法在测试过程中不会运行。

注意:

  • @Before@After有几个方法就执行几遍,@AfterClass@BeforeClass只执行一遍。
  • @timeout的单位是毫秒,如果你写@timeout=4000的话,这个测试用例最多可以运行4s。

6 测试断言

检查并判断程序的运行结果是软件测试中的一项重要工作。在测试前测试者通常会在程序中埋入一些断言条件,若程序运行时不能满足这些条件,则表明程序的运行状态(或运行结果)与期望不一致,程序中存在缺陷。
JUnit通过Assert类 提供了一系列断言方法来帮助测试者判断程序的运行结果。一般的,断言方法中的参数包括期望变量var expecrea和实际变量var aetua两个部分。在断言语句运行时,若var expectedvar acra的值相等,则表明程序运行结果与期望相符;否则,若var espeeted与``var actua的值不相等,则表明程序运行结果与期望相异,测试用例运行失败。

6.1 Assert类的方法

基于java的系统测试文档_单元测试_08

注意:第四个方法中的delta代表两个参数的误差,在指定的误差之内,两个double类型的变量都视为一致。

7 Junit中的异常处理

7.1 try/ catch/ finally
  • 开发者在Java编程时会对程序中的异常情况进行处理。一般的,可以再发生异常的方法内添加try/ catch/ finally 等处理语句,将异常在方法内部解决,也可以通过使用throw/throws等语句交由方法上一层进行解决。
7.2 ExpectedException
  • JUnit中的ExpectedException可以更精确地定位异常发生位置。在应用ExpectedException类前,需要用@Rule注解声明ExpectedException异常。然后,在异常发生位置前调用expect方法检测异常。此外,还可使用ExpectedException中的expectMessage方法设置异常属性信息。
  • Exception类前,需要用@Rule注解声明ExpectedException异常。然后,在异常发生位置前调用expect方法检测异常。此外,还可使用ExpectedException中的expectMessage方法设置异常属性信息。
  • 基于java的系统测试文档_junit_09

8 代码覆盖率

基于java的系统测试文档_eclipse_10


代码行颜色

绿色:代码被执行过
黄色:代码部分被执行过
红色:代码没有被执行过

钻石符号:

绿色:完全执行的决策分支
黄色:部分执行的决策分支
红色:某行没有执行过的决策分支