TestNG注释- @BeforeMethod

在这篇文章中,我们将学习TestNG中的@BeforeMethod注释。@BeforeMethod注释方法将在类中的每个测试用例或方法之前执行,但在@BeforeClass注释方法之后执行。因此,这意味着@BeforeMethod注释将运行与特定类中的测试用例一样多的次数。

那么,这个带@BeforeMethod注释的方法什么时候执行呢?

下面的XML将帮助您理解@BeforeMethod注释方法的执行点。


    
        
            
                
                    
                    
                    
                    
                
            
            
                
                    
                    
                    
                    
                
            
        
    

因此,如上面的XML所示,@BeforeMethod注释方法在类中的每个测试用例(或XML文件中提到的)之前执行。让我们举一个例子来说明这一点。

CodekruTestFirst.java

package Test;
 
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
 
public class CodekruTestFirst {
 
    @BeforeMethod
    public void beforeMethod() {
        System.out.println("beforeMethod in CodekruTestFirst class");
    }
 
    @Test
    public void testMethod1() {
        System.out.println("Executing the test1 in CodekruTestFirst class");
        Assert.assertTrue(true);
    }
 
    @Test
    public void testMethod2() {
        System.out.println("Executing the test2 in CodekruTestFirst class");
        Assert.assertTrue(true);
    }
 
}

CodekruTestSecond.java

package Test;
 
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
 
public class CodekruTestSecond {
 
    @BeforeMethod
    public void beforeMethod() {
        System.out.println("beforeMethod in CodekruTestSecond class");
    }
 
    @Test
    public void testMethod1() {
        System.out.println("Executing the test1 in CodekruTestSecond class");
        Assert.assertTrue(true);
    }
 
    @Test
    public void testMethod2() {
        System.out.println("Executing the test2 in CodekruTestSecond class");
        Assert.assertTrue(true);
    }
 
}

现在,我们将运行上面提到的XML,看看会发生什么。

XML文件的输出-

beforeMethod in CodekruTestFirst class
Executing the test1 in CodekruTestFirst class
beforeMethod in CodekruTestFirst class
Executing the test2 in CodekruTestFirst class
beforeMethod in CodekruTestSecond class
Executing the test1 in CodekruTestSecond class
beforeMethod in CodekruTestSecond class
Executing the test2 in CodekruTestSecond class

===============================================
codekru
Total tests run: 4, Failures: 0, Skips: 0
===============================================
这里发生了什么
  • 默认情况下,TestNG将按照XML文件中的顺序运行我们的测试。因此,它将选择CodekruTestFirst类并运行它的@BeforeMethod注释方法,它的第一个测试用例,然后再次运行注释方法,然后运行第二个测试用例,直到所有用例都被执行。
  • 然后,它将到达CodekruTestSecond类并以相同的方式执行它。
假设情景
如果我们在一个类中保留两个带@BeforeMethod注释的方法会怎么样?

让我们在CodekruTestFirst类中保留两个带@BeforeMethod注释的方法,看看当我们运行该类时会发生什么。

import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
 
public class CodekruTestFirst {
 
    @BeforeMethod
    public void beforeMethod1() {
        System.out.println("beforeMethod1 in CodekruTestFirst class");
    }
     
    @BeforeMethod
    public void beforeMethod2() {
        System.out.println("beforeMethod2 in CodekruTestFirst class");
    }
 
 
    @Test
    public void testMethod1() {
        System.out.println("Executing the test1 in CodekruTestFirst class");
        Assert.assertTrue(true);
    }
 
    @Test
    public void testMethod2() {
        System.out.println("Executing the test2 in CodekruTestFirst class");
        Assert.assertTrue(true);
    }
 
}

下面是用于运行CodekruTestSubclass的XML文件。


    
        
            
        
    

运行XML文件后的输出。

beforeMethod in CodekruTest class
Excecuting test in CodekruTest class
beforeMethod in CodekruTest class
Executing test in CodekruTestSubclass

这里,这些方法被CodekruTestSubclass继承,因此我们得到了上面的输出。如果我们将超类的方法设置为私有,那么在运行CodekruTestSubclass时它们将不会被执行。

你可能感兴趣的:(java)