TestNG简单如门使用(Idea中)

1 篇文章 0 订阅

1,如下图,选中想要生成单元测试的类,点击菜单栏Navigate,选择Test,根据提示选择想要生成的相关测试的方法,在对应的Test目录生成测试类。

2,TestNG的简单使用

首先生成的所有测试方法上都有Test注解,你可以在对应的测试方法测试相关的你想要单元测试的方法。

(1)assertEquals的使用

首先导入相关的包

import static org.testng.Assert.assertEquals;

执行之后,如下图,则运行成功,实际得到的与所期望的是一致的

修改对应代码,并运行,如下图

高级用法

上面的例子只是简单用法,旨在让初学者可以快速上手了解 TestNG 的 用法,下面介绍一些高级用法来帮助我们更好的进行单元测试。

@BeforeClass/@AfterClass@BeforeMethod/@AfterMethod

除了 @Test 注解,TestNG 还有两对常用的注解:@BeforeClass/@AfterClass@BeforeMethod/@AfterMethod。这些注解的关系如下图:

从上图可以看出,@BeforeMethod/@AfterMethod 是在 @Test 注解函数执行之前/之后执行的钩子函数。在执行每一个 @Test 注解函数执行之前/之后都会执行 @BeforeMethod/@AfterMethod 注解函数。

@BeforeClass/@AfterClass 的作用和 @BeforeMethod/@AfterMethod 类似,不同的是,@BeforeClass/@AfterClass 是在初始化类的时候执行,这就意味着 @BeforeClass/@AfterClass 只会执行一次,而 @BeforeMethod/@AfterMethod 执行次数和 @Test 注解函数个数一样。

public class UtilsMainTest {

    @BeforeClass
    public void say(){
        System.out.println("我是前置类");
    }

    @Test
    public void testAdd() throws Exception {
        UtilsMain um = new UtilsMain();
        assertEquals(um.add(4,4),8);
    }

    @Test
    public void testDec() throws Exception {
        UtilsMain um = new UtilsMain();
        assertEquals(3,um.dec(8,5));
    }
    @BeforeMethod
    public void go1(){
        System.out.println("我是前置方法");
    }
    @AfterMethod
    public void go2(){
        System.out.println("我是后置方法");
    }
    @AfterClass
    public void say2(){
        System.out.println("我是后置类");
    }
    @Test(timeOut = 1)
    public void testTime(){
        System.out.println("123");
        int i =0;
        while(i<1000000000){
            i++;
        }
    }
    @Test(expectedExceptions = NullPointerException.class)
    public void testSub(){
        System.out.println("456");
        throw new NullPointerException();
    }
    @Test(dependsOnMethods = {"testTime","testSub"})
    public void testMethond(){
        System.out.println(0);
    }

    @DataProvider(name="user")
    public Object[][] getStr(){
        return new Object[][]{
                { "", "", "账号不能为空" },
                { "admin"," " ,"密码不能为空" },
                { " ", "a123456","账号不能为空" },
                { "ad ", "123456","账号“ad”不存在" },
                { "admin","12345" ,"密码错误" },
        };
    }
    @Test(dataProvider = "user")
    private void sout(String uname,String pword,String msg){
        System.out.println(uname+"->"+pword+"->"+msg);

    }
  
}

 

执行上面的代码,可以看到 beforeClass/afterClass 只执行一次,而 beforeMethod/afterMethod 执行了两次。

超时测试

@Test 注解中添加 timeOut 参数就可以进行超时测试,@Test(timeOut=10) 表示测试方法的运行时间应该低于 10ms,如果超时者测试失败。超时测试对于网络连接类的测试相当有用。超时测试具体用法如下

@Test(timeOut = 1)
public void testSub() {
    int i =0;
    while (i < 1000000000) {
        i++;
    }
}

异常测试

异常测试用于测试方法是否有抛出异常,通过 @Test(expected=NullPointerException.class) 来指定方法必须抛出 NullPointerException,如果没有抛出异常或者抛出其他异常则测试失败。

@Test(expectedExceptions = NullPointerException.class)
public void testSub() {
    throw new  NullPointerException();
}

依赖测试

有时候需要测试方法按照一个特定的顺序被调用,这个时候需要使用 @Test 注解的 dependsOnMethods 参数来指定依赖方法和方法的执行顺序

// test1 执行之前会先执行 test2, test3
@Test(dependsOnMethods = {"test2","test3"})
public void test1(){
    
}
@Test
public void test2(){

}
@Test
public void test3(){

}

提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象 []的测试方法的参数列表中可以分配。该@Test 方法,希望从这个 DataProvider 的接收数据,需要使用一个 dataProvider 名称等于这个注解的名字。

DataProvider的使用

第一种用法 :返回Object[][]

 @DataProvider(name="user")
    public Object[][] getStr(){
        return new Object[][]{
                { "", "", "账号不能为空" },
                { "admin"," " ,"密码不能为空" },
                { " ", "a123456","账号不能为空" },
                { "ad ", "123456","账号“ad”不存在" },
                { "admin","12345" ,"密码错误" },
        };
    }
    @Test(dataProvider = "user")
    private void sout(String uname,String pword,String msg){
        System.out.println(uname+"->"+pword+"->"+msg);

    }

DataProvider返回的是一个Object的二维数组,二维数组中的每个一维数组都会传递给调用函数,作为参数使用。运行的时候,会发现, @Test标识的test method被执行的次数和object[][]包含的一维数组的个数是一致的,而@Test标识的函数的参数个数,也和object内一维数组内的元素数是一致的。

 


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值