TestNG注解-@Test

本文深入解析TestNG的注解功能,重点介绍@Test注解的使用。通过具体示例,展示了如何创建被测试类和测试类,以及测试方法的执行顺序。同时,提到了可以通过注解属性和依赖关系设置测试方法的执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

TestNG有很强大的注解功能,在这里要注意注解注释的区别!

注解是一种元数据,能够被脚本编译所识别,起到一定的控制作用。

注释只是代码句或者一段代码的注释说明,本身并不影响代码的编译和执行,只是增强不同的开发人员对代码功能的有效理解。

正文

本文将结合第一个TestNG测试类,来介绍@Test 注解

首先附上文中演示例子的目录结构

testAnnotation

1、创建被测试类

项目目录src/main/java/../下创建被测试类ClassToBeTested.java

一个具有int类型参数,能够实现加法求和的功能。


public class ClassToBeTested {
    public int add(int a, int b){
        return a+b;
    }
}

2、创建测试类

项目目录src/test/java/../下创建测试类TestAnnotation.java。示例中展示的测试类中有三个@Test注解,凡是@Test注解的方法就是我们实际执行的测试方法。

一个测试类中可以有多个测试方法。

public class TestAnnotation {
    @Test
    public void testMethod1(){
        ClassToBeTested test = new ClassToBeTested();
        int result = test.add(3,4);
        System.out.println("这是第一个测试方法------->"+result);
    }
    @Test
    public void testMethod2(){
        System.out.println("这是第二个测试方法");
    }
    @Test
    public void testMethod3(){
        System.out.println("这是第三个测试方法");
    }
}

3、run测试类

执行结果如下


实际上,测试类中默认的测试方法执行顺序:按照测试方法方法名字母排序顺序执行。上述三个方法testMethod1()、testMethod2()、testMethod3(),方法名称的前面都一样,只有最后一位不同,所以按照1/2/3的顺序来执行测试方法。

比如我们把测试方法testMethod2()方法名前加一个字母a,再来确认执行的顺序。这个时候测试方法atestMethod2()应该首先执行。如下图

另外,我们也可以通过注解属性、依赖关系等人为设置测试方法的执行顺序,确认它们的优先级,这部分内容将在后面的文章中继续介绍。

<think>嗯,用户问的是TestNG中的@Test注解详解。我需要先回忆一下TestNG的相关知识。TestNG是一个测试框架@Test是它的核心注解,用于标记测试方法。用户可能想知道这个注解的各种参数和用法。首先,应该介绍@Test的基本作用,比如标记方法为测试用例。然后,常见的参数需要逐一解释,比如enabled、dependsOnMethods、groups、timeOut、expectedExceptions、dataProvider等。每个参数的作用和使用示例都需要详细说明,可能还需要代码示例来说明。 比如,enabled参数用来控制是否执行某个测试方法,默认是true,如果设为false,这个方法就不会执行。dependsOnMethods用于指定依赖的其他测试方法,只有依赖的方法通过,当前方法才会执行。groups可以把测试方法分组,方便按组执行。timeOut设置超时时间,如果测试方法执行时间超过这个时间,就会失败。expectedExceptions用于期望抛出的异常,如果方法抛出了指定的异常,测试就通过。dataProvider则关联数据提供者,用于参数化测试。 然后,要给出一个综合的代码示例,展示这些参数的用法。比如创建几个测试方法,每个方法使用不同的参数,并在注释中说明每个参数的作用。 最后,按照用户的要求,生成相关问题。这些问题应该围绕TestNG的其他注解、断言、参数化测试、并行执行等方面,确保覆盖用户可能感兴趣的其他知识点。 需要确保回答清晰,结构合理,参数解释到位,代码正确,并且相关问题能引导用户进一步学习TestNG的其他功能。同时,注意用户要求代码只能是Java,所以示例代码要用Java编写,使用TestNG的语法。</think>TestNG中的`@Test`注解是定义测试方法的核心注解,以下是其核心参数和使用方式的详细说明: --- ### **1. 基础用法** ```java @Test public void basicTest() { System.out.println("基础测试用例"); } ``` - **作用**:标记一个普通测试方法,TestNG会自动发现并执行所有带`@Test`注解的方法。 --- ### **2. 核心参数详解** #### **2.1 enabled** ```java @Test(enabled = false) public void skippedTest() { // 此测试不会执行 } ``` - **作用**:控制是否禁用测试方法(默认`true`)。 --- #### **2.2 dependsOnMethods** ```java @Test public void login() { System.out.println("登录操作"); } @Test(dependsOnMethods = "login") public void checkout() { System.out.println("依赖登录的支付测试"); } ``` - **作用**:定义测试方法依赖链,被依赖的测试失败时当前测试会被标记为`SKIPPED`。 --- #### **2.3 groups** ```java @Test(groups = "smoke") public void smokeTest1() { System.out.println("冒烟测试组用例"); } @Test(groups = {"regression", "integration"}) public void multiGroupTest() { System.out.println("多分组测试"); } ``` - **作用**:将测试方法归类到逻辑分组,支持通过`testng.xml`按组执行。 --- #### **2.4 timeOut** ```java @Test(timeOut = 2000) // 毫秒单位 public void timeoutTest() throws InterruptedException { Thread.sleep(2500); // 触发超时失败 } ``` - **作用**:设置测试方法的超时时间阈值。 --- #### **2.5 expectedExceptions** ```java @Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { int result = 10 / 0; // 抛出预期异常则测试通过 } ``` - **作用**:验证是否抛出指定类型的异常。 --- #### **2.6 dataProvider** ```java @DataProvider(name = "userData") public Object[][] provideData() { return new Object[][] { {"user1", "pass123"}, {"user2", "pass456"} }; } @Test(dataProvider = "userData") public void loginTest(String username, String password) { System.out.println("登录测试: " + username); } ``` - **作用**:实现参数化测试,通过数据驱动方式重复执行测试。 --- ### **3. 测试配置方法** ```java @BeforeMethod public void setup() { System.out.println("每个测试方法前的预处理"); } @AfterMethod public void teardown() { System.out.println("每个测试方法后的清理"); } ``` - **关联注解**:`@BeforeMethod`/`@AfterMethod`用于定义测试生命周期方法。 --- ### **4. 测试优先级** ```java @Test(priority = 1) public void highPriorityTest() { System.out.println("优先级1的测试"); } @Test(priority = 2) public void lowPriorityTest() { System.out.println("优先级2的测试"); } ``` - **作用**:通过`priority`参数控制执行顺序(数值越小优先级越高)。 --- ### **5. 多线程测试** ```java @Test(threadPoolSize = 3, invocationCount = 5) public void concurrentTest() { System.out.println("线程ID: " + Thread.currentThread().getId()); } ``` - **参数说明**: - `threadPoolSize`:并发线程数 - `invocationCount`:总调用次数 --- ### **完整示例** ```java import org.testng.annotations.*; public class ComprehensiveTestExample { @BeforeSuite public void globalSetup() { System.out.println("全局初始化"); } @Test(groups = "critical", priority = 0) public void essentialTest() { System.out.println("关键路径测试"); } @Test(dataProvider = "inputProvider", dependsOnGroups = "critical") public void dataDrivenTest(String input) { System.out.println("数据驱动测试: " + input); } @DataProvider public Object[][] inputProvider() { return new Object[][] {{"Case1"}, {"Case2"}}; } @AfterClass public void classCleanup() { System.out.println("测试类清理"); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值