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

JAVA 一零 1年前 (2017-12-01) 323次浏览 0个评论
如果对 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 输出结果

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


爱码星 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:从 0 到 1 学 JAVA 第十天——进一步学习 Junit 套件测试等
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到