如果对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输出结果
显示每个参数经过运行测试用例后的结果