JUnit4 框架学习与使用

框架介绍:

         Junit是用于编写和运性可重复的自动化测试的开源测试框架。

安装:

         使用Myeclipse时,由于该工具自带了Junit,故可以直接右键项目,选择BuildPath à addLibrary à Junit

         手动下载hamcrest-core-1.3.jar和junit-4.12.jar放到lib文件夹下面,然后右键build Path –> add to build Path

 

 

注解的使用

注解

描述

@Test
public void method()

测试注释指示该公共无效方法它所附着可以作为一个测试用例。

@Before
public void method()

Before注释表示,该方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件。

@BeforeClass
public static void method()

BeforeClass注释指出这是附着在静态方法必须执行一次并在类的所有测试之前。发生这种情况时一般是测试计算共享配置方法(如连接到数据库)

@After
public void method()

After 注释指示,该方法在执行每项测试后执行(如执行每一个测试后重置某些变量,删除临时变量等)

@AfterClass
public static void method()

当需要执行所有的测试在JUnit测试用例类后执行,AfterClass注解可以使用以清理建立方法,(从数据库如断开连接)。注意:附有此批注(类似于BeforeClass)的方法必须定义为静态。

@Ignore
public static void method()

当想暂时禁用特定的测试执行可以使用忽略注释。每个被注解为@Ignore的方法将不被执行。

一个测试类单元测试的执行顺序为:

@BeforeClass –> @Before –> @Test –> @After –> @AfterClass

每一个测试方法的调用顺序为:

@Before –> @Test –> @After

 

断言的使用

判断程序在各种情况下的运性情况,运性失败则程序终止,且点击此处可跟踪问题

带提示信息的断言使用,例:

void assertTrue([String message], boolean condition)

 

@Test

    public void testAssertTrue() {

       Boolean var1 = true;

       Boolean var2 = false;

       assertTrue("这是一个测试消息头:",var1);//结果相等

       assertTrue("这是一个测试消息头:",var2);//结果错误

       assertTrue(var2);//结果错误

    }

常用断言注解:

@assertEquals                 比较两个值

@assertTrue            断言一个条件

@assertFalse           断言一个条件为假

@assertNotNull      断言一个 对象不为null

@assertNull             断言一个条件为null

@assertSame          断言两个对象引用相同的对象

@assertNotSame   断言两个对象不是引用的相同对象

@asssertArrayEquals      断言两个数据是否相等

 

参数化测试

发展由来:为了单元测试的严谨性,我们模拟了不同类型的字符串来测试方法的处理能力,为此我们可能会编写大量的单元测试方法。可是这些测试方法都是大同小异;代码结构都是相同的,不同的仅仅是测试数据和期望值。有没有更好的方法将测试方法中相同的结构代码提取出来,提高代码的重用度,减少复制粘贴的烦恼。

  1. 注解@RunWith(Parameterized.class)
  2. 这个类有一个构造函数,用于存储数据,参数值数据与测试数据集合一致
  3. 这个类有一个静态方法生成并返回测试数据,并被注解为@Parameters。(若多个静态方法都被加上了该注解,则只有最后一个会生效)
  4. 这个类有一个测试方法,被注解为@Test。(若有多个@Test方法,则每个方法都会用到@Parameters的参数)
  5. 测试时选中类名,右键。

 

/**
 *Junit参数化测试
 *<功能详细描述>
 * @see
 * @since
 */
@RunWith(value = Parameterized.class)
public class JunitParamTest {
	 private static JunitParam calculator = new JunitParam();  
	  
	 	private int param;  
	    private int paramm;  
	    private int result;  
	  
	    //测试数据集合,方法名可以随意定义,返回类型可变,但是必须用@Parameters标注    生成并返回测试数据
	    @Parameters  
	    public static Collection data() {  
	        // 数组中,包含了传入参数和期望结果,数组参数顺序与构造函数参数顺序一致即可  
	        return Arrays.asList(new Object[][] { { 2, 3, 6 }, { 0, 1, 0 },{ -3, 2, -6 }});  
	    }  
	    //构造函数,存储测试数据,参数赋值顺序与测试数据集合一致  
	    public JunitParamTest(int param, int paramm, int result) {  
	        this.param = param;  
	        this.paramm = paramm;  
	        this.result = result;  
	    }  
	  
	    @Test  
	    public void square() {  
	        calculator.multiply(param, paramm);  
	        assertEquals(result, calculator.getResult());  
	    }  
}

public class JunitParam {
	 private static int result; // 静态变量,用于存储运行结果  
	  
	    public void add(int n){  
	  
	        result = result + n;  
	    }  
	  
	    public void multiply(int n , int m) {  
	  
	        result = n * m;  
	    }  
	  
	    public int getResult() {  
	  
	        return result;  
	    }  
}

 

套件测试(打包测试)

原理:将不同类中被@Test标签标注的类在同一时间运行

用法在套件测试类上标注:

@RunWith(Suite.class)

@Suite.SuiteClasses({类1.class, 类2.class})

 

 

 

 

/**
 *套件测试Demo
 *<功能详细描述>
 * @see
 * @since
 */

@RunWith(Suite.class)
@Suite.SuiteClasses({OneSuiteTest.class,TwoSuiteTest.class})
public class JunitSuite {
	
}

/**
 *单元测试类1
 *<功能详细描述>
 * @see
 * @since
 */
public class OneSuiteTest {
	
	
	@Test
	public void test(){
		System.out.println("套件测试one");
	}
	
}

/**
 *单元测试类2
 *<功能详细描述>
 * @see
 * @since
 */
public class TwoSuiteTest {
	
	@Test
	public void test(){
		System.out.println("套件测试two");
	}
}

 

测试异常

用法:在需要被测试的方法名上面加@Test(expected = ArithmeticException.class)

结果:若出现异常,则程序正常运行。

注意事项:

1.Junit的测试方法都是public,private修饰会报错

2.Junit测试方法不能传参数

3.Junit测试方法的返回值,必须为void

应为:

    @Test
	public void method(){
		........
	}

 

 

 

你可能感兴趣的:(java学习)