从0到1学JAVA第十天——进一步学习Junit套件测试等

By | 12月 1, 2017
如果对Junit测试不了解请先看Juni入门学习,从0到1学JAVA之第九天——Junit学习及测试
本文的所有代码都已上传github,可前往JAVA代码库 下载
本文代码目录结构如下

1.Junit套件测试

1.1套件测试?

套件测试是同时执行多个测试用例,代替一个一个执行,提高了执行效率。在套件测试中使用@RunWith
@Suite

1.2测试代码JavaSuitTest.java

package pers.junit.learn.test;

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({CodeTest.class,TestDuanyan.class})
public class JavaSuitTest {

	@Test
	public void test() {
		fail("Not yet implemented");
	}

}

同时测试CodeTest和TestDuanyan两个测试用例,junit控制台可以看到两个测试用例都已执行,显示如下执行结果:

2.Junit规则

2.1Junit规则是什么?

规则允许灵活地在测试类重新定义每个测试方法的行为。规则使用@Rule注解标出测试类的公共字段,字段类型为MethodRule,测试方法如何运行并报告。规则可以使用现有的或自己创建的自定义规则。

2.2CodeTest.java 测试TestName规则:

package pers.junit.learn.test;

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.*;
import pers.junit.learn.test.*;
import org.junit.rules.TestName;
import org.junit.Rule;

public class CodeTest {
	
/**	下方操作方便获知测试的方法名   Junit规则测试**/
	@Rule
	public TestName name = new TestName();
	
	@Test
	public void  test1(){
		System.out.println(name.getMethodName());        #获取方法名称,输出test1
//		System.out.println(name.getClass());
		assertEquals("test1",name.getMethodName());
	}
}

 3.Junit4测试方法抛出的异常

下方测试由方法抛出的异常,方法抛出ArithmeticException异常则测试通过,这是在测试预期的异常。如果去掉(expected = ArithmeticException.class)则会报错

package pers.junit.learn.test;

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.*;
import pers.junit.learn.test.*;
import org.junit.rules.TestName;
import org.junit.Rule;

public class CodeTest {
	@Test(expected = ArithmeticException.class)
	public void divisionWithExceprion(){
		int i = 1/0;
	}
}  

 4.Junit4时间测试

4.1时间测试?

时间测试则是用于测试用例是否在指定的时间内完成,如果未完成则会报错

4.2.测试实践

package pers.junit.learn.test;

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.*;
import pers.junit.learn.test.*;
import org.junit.rules.TestName;
import org.junit.Rule;

public class CodeTest {
/**超时测试,测试Junit测试是否超时,是否超过设定的毫秒数**/
	@Test(timeout = 1000)
	public void time(){
		while(true);
	}
}  

如果超时,则junit控制台会报错提示超时

5.Junit4参数测试实例

5.1参数化测试是什么?

所谓参数化测试时允许使用不同的参数多次运行同一个测试用例。

5.2方法类GetSum.java

package pers.junit.learn.test;

public class GetSum {
	public static int sum(int s1, int s2){
		System.out.println("求值:"+s1+" + "+s2);
		return s1+s2;
	}
}

 5.3Junit测试类GetSumTest.java

参数化测试中使用@RunWith@Parameters两个注解。

package pers.junit.learn.test;
import static org.junit.Assert.*;
import org.junit.*;
import java.util.*;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(value = Parameterized.class)
public class GetSumTest {
	private int numA;
	private int numB;
	private int expected;

	public GetSumTest(int numA, int numB, int expected){
	      this.numA = numA;	
		  this.numB = numB;
		  this.expected = expected;
	}
	
//	GetSum getSum = new GetSum();
//	int sum = getSum.sum(6, 7);
//	int testsum = 13;
//	
//	@Test
//	public void testSum(){
//		System.out.println("比较: "+sum+"&"+testsum);
//		assertEquals(sum,testsum);
//	}
	
	@Parameters(name = "{index}: sum({0}+{1}) = {2}")
	public static Iterable<Object[]> canshu(){
		return Arrays.asList(new Object[][]{
			{1,2,3},
			{3,4,7},
			{3,7,10}
		});
	}
	@Test
	public void test_sum(){
		assertEquals(expected,GetSum.sum(numA,numB));
	}
	
}

 5.4输出结果

显示每个参数经过运行测试用例后的结果

发表评论

您的电子邮箱地址不会被公开。