发表于: 2017-12-01 15:30:10

2 832


今日完成的任务

如果对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输出结果

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



明日进行的任务



返回列表 返回列表
评论

    分享到