一. TestNG 对Junit的扩展可通过xml脚本同时运行多个case
TestNG运行时将经过一下几个阶段:
1. 类级初始化资源处理 @BeforeClass注解标记
2. 方法级别初始化资源处理 @BeforeMethod
3. 执行测试用例中的方法 @Test
4. 方法级别的销毁 @AfterMethod
5. 类级别的销毁 @AfterClass
如果定义了多个初始化方法,先执行定义在最后面的,而销毁方法先执行定义在最前面的。
如果定义多个@Test的用例,会为每个@Test方法生成一个测试用例实例分别运行。
@BeforeClas @AfterClass在一个测试用例实例中只运行一次。
测试方法: 通过@Test标注方法执行一个测试逻辑,然后通过Assert进行断言。
详细实例请见:com.test.TestNGLearn
二. Mockito
Mockito只适用于对Service层的方法进行单元测试
Mockito可以mock某些类和方法的执行,设定某些期望的行为和返回值
常用来测试判定逻辑等,通过mock避免执行某些依赖的逻辑
Mockito + Assert 可以方便的测试服务类的逻辑结构。
详细实例请见:com.test.MockitoLearn
三. Unitils
专用于测试框架整合, 通过配置文件开启模块功能。unitils定义了Module接口,通过实现这个接口整合其他框架,同时也可以自定义。
1. ReflectionAssert反射断言 详细实例见: com.test.UnitilsLearn
2. 集成Spring 详细实例见:com.test.UnitilsSpring
3. 集成Hibernate
4. 集成DBUtil
5. 对web层测试
TestNG示例:
package com.test;
import org.testng.annotations.*;
// 用于指定类属于的分组
// @Test(groups = {"group1"})
public class TestNGLearn {
@BeforeClass
public static void init(){
System.out.println("类初始化");
}
@AfterClass
public static void destroy(){
System.out.println("类销毁");
}
@BeforeMethod
public void initMethod(){
System.out.println("用例执行初始化");
}
@Test
public void testTestNG(){
System.out.println("一个简单的测试");
}
// 开启异常测试,如果没有抛出指定的异常则测试失败。
@Test(enabled = true , expectedExceptions = RuntimeException.class)
public void testException(){
throw new RuntimeException();
}
// 如果在timeOut指定的毫秒时间内未完成则测试失败
@Test(enabled = true, timeOut = 2000)
public void testTimeOut() throws InterruptedException{
Thread.sleep(2000);
}
// 参数化测试,直接提供批量的测试参数,不必为每个参数写测试用例
@DataProvider(name = "testParam")
public static Object[][] getParameters(){
String [][] params = {
{"第一组第一个参数","第一组第二个参数"},{"第二组第一个参数","第二组第二个参数"}};
return params;
}
// 通过一个二维数组,指定多组参数,每组可指定多个参数。
@Test(dataProvider = "testParam")
public void testBatchParam(String first , String second){
System.out.println(first + " " +second);
}
// 分组测试, 每个测试方法单独生成实例,并都执行@BeforeMethod,而@BeforeClass之执行一次
@Test(groups = {"group1"})
public void testGroup2(){
System.out.println("分组测试 group1分组的第1个测试用例");
}
@Test(groups = {"group1","group2"})
public void testGroup1_1(){
System.out.println("分组测试 group2分组的第1个测试用例");
}
@Test(groups = {"group2"})
public void testGroup1_2(){
System.out.println("分组测试 group2分组的第2个测试用例");
}
// 依赖测试
@Test
public void testDepond(){