1.JUnit测试套件

​ 如果在测试类不端增加的情况下,如何运行所有的单元测试代码类?一个个测试类的执行吗?显然繁琐且费劲。
​ 将要运行的测试类集成在我们的测试套件中,比如一个系统功能对应一个测试套件,一个测试套件中包含多个测试类,每次测试系统功能时,只要执行一次测试套件就可以了。

1.1 测试类及测试套件代码

package com.fzhiy.junit03;

import org.junit.Test;

/**
 * 
 * @author yufeng
 */
public class TaskTest1 {

	@Test
	public void test() {
		System.out.println("this is TaskTest1...");
	}
}

package com.fzhiy.junit03;

import org.junit.Test;

/**
 * 
 * @author yufeng
 */
public class TaskTest2 {

	@Test
	public void test() {
		System.out.println("this is TaskTest2...");
	}
}

package com.fzhiy.junit03;

import org.junit.Test;

/**
 * 
 * @author yufeng
 */
public class TaskTest3 {

	@Test
	public void test() {
		System.out.println("this is TaskTest3...");
	}
}

​ 新建一个套件类,包含以上三个任务类:

package com.fzhiy.junit03;

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

/**
 * 
 * @author yufeng
 */
@RunWith(Suite.class)
@SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})
public class SuiteTest {

	/** 	
	 * 1.测试套件就是组织测试类一起运行的
	 * 
	 * 写一个作为测试套件的入口类,这个类里不包含其他的方法
	 * 更改测试运行器Suite.class
	 * 将要测试的类作为数组传入到Suite.SuiteClasses({})
	*/
}

运行结果:
JUnit4笔记四——JUnit测试套件使用及参数化设置_Java

1.2 说明

​ ①使用@RunWith注解,修改测试运行器。例如@RunWith(Suite.class),这个类就成为测试套件的入口类。

​ ②@Suite.SuiteClasses()中放入测试套件的测试类,以数组的形式{class1,class2,…}作为参数

2.JUnit参数化设置

​ 如果测试代码大同小异,代码结构都是相同的,不同的只是测试的数据和预期值,那么有没有更好的办法将相同的代码结构提取出来,提高代码的重用度呢?
​ 解决:进行参数化测试。
​ 步骤:
  ①要进行参数化测试,需要在类上面指定如下的运行器:@RunWith (Parameterized.class)
  ②然后,在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection。
  ③在测试类的构造方法中为各个参数赋值,(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。

2.1 代码:

package com.fzhiy.junit03;

import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import com.fzhiy.junit02.Calculate;

/**
 * 
 * @author yufeng
 */
@RunWith(Parameterized.class)   //1.更改默认的测试运行器为RunWith(Parameterized.class)
public class ParameterTest {

		//2.声明变量存放预期值和测试数据
		int expected =0;
		int input1 = 0;
		int input2 = 0;
		
		//3.声明一个返回值 为Collection的公共静态方法,并使用@Parameters进行修饰
		@Parameters
		public static Collection<Object[]> data() {
			return Arrays.asList(new Object[][]{
					{3,1,2},
					{4,2,2}
			}) ;
		}
		
		//4.为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值
		public ParameterTest(int expected,int input1,int input2) {
			this.expected = expected;
			this.input1 = input1;
			this.input2 = input2;
		}
		
		//5.运行测试方法,即可完成对多组数据的测试
		@Test
		public void testAdd() {
			assertEquals(expected, new Calculate().add(input1, input2));
		}
}

2.2 运行结果

JUnit4笔记四——JUnit测试套件使用及参数化设置_Java_02