简体   繁体   中英

BeforeTest would not run before every Test method of the class in <test> tag

Inquiring further into SO-4310964 , I went through the description of annotations at test.org .

@BeforeTest: The annotated method will be run before any test method belonging to the classes inside the test tag is run.

Now what we have in our code is as follows :

MyTests.java

public class MyTests {
    @BeforeTest
    public void preTest(){
        //Want to perform some action, suppose clear a Hashmap
        System.out.println("Before Test Called!");
    }

    @Test(groups = {"SanityTests"}, testName = "test1")
    public void Test1(){
            System.out.println("test1");
    }

    @Test(groups = {"SanityTests"}, testName = "test2")
    public void Test2(){
            System.out.println("test2");
    }
}

Sanity-Test.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="SanityTests" verbose="1" >
    <listeners>
        <listener class-name="com.android.MyTestsListener" />
    </listeners>

    <test name="sanityAndroid">
        <classes>
            <class name="com.android.MyTests" />
        </classes>
    </test>
</suite>

Note : I know that @BeforeMethod solves the problem. But to my understanding the link details that the @BeforeTest[ preTest ] method would run before any @Test[ test1 , test2 ] method which belong to the class inside the <test> tag. Where am I going wrong?

BeforeTest : The annotated method will be run before any test method belonging to the classes inside the <test> tag is run

Focus on the "Before any test method", not every test method.

Now, if the test tag have 2 classes as follow:

<test name="sanityAndroid">
    <classes>
        <class name="com.android.MyTests1" />
        <class name="com.android.MyTests2" />
    </classes>
</test>

Class MyTest1 have @Test methods as test1 , test2 and Class MyTest2 have @Test methods as test3 , test4.

So, BeforeTest method will run before any of the test methods ie test1, test2, test3, test4 belonging to classes ie MyTest1, MyTest2 inside the <test> tag.

Execution becomes BeforeTest -> (test1, test2, test3, test4) acc to dependency.

Similar to this is AfterTest: The annotated method will be run after all the test methods belonging to the classes inside the <test> tag have run.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM