先看代码
testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="NotLogin" >
    <test name="Smoke">
        <classes>

            <class name="com.ty.cases.Class1">
                <methods>
                    <include  name="classOneMethod" />
                </methods>
            </class>

            <class name="com.ty.cases.Class2">
                <methods>
                    <include  name="classTwoMethod" />
                </methods>
            </class>

        </classes>
    </test>
</suite>

Init.java

public class Init {

    public int num = -1;

    @BeforeMethod
    public void setupA() throws MalformedURLException {
        System.out.println("setupA:" + num);
    }

    @BeforeMethod
    public void setupB() throws MalformedURLException {
        System.out.println("setupB:" + num);
    }

    @AfterMethod
    public void teardownA() {
        System.out.println("teardownA");
    }

    @AfterMethod
    public void teardownB() {
        System.out.println("teardownB");
    }

    @BeforeTest
    public void before() {
        num = 0;
    }

}

Class1.java

public class Class1 extends Init{
    @Test
    public void classOneMethod() {
        System.out.println("classOneMethod");
    }
}

Class2.java

public class Class2 extends Init{
    @Test
    public void classTwoMethod() {
        System.out.println("classTwoMethod");
    }
}

项目结构:

说明
Init.java 里分别有 2 个@BeforeMethod@AfterMethod方法,以及 1 个@BeforeTest。在@BeforeTest方法里,将 num 进行了初始化。
Class1.java 和 Class2.java 分别为两个测试类,都只包含 1 个测试方法,为了便于区分,将它们命名为 classOneMethod 和 classTwoMethod
testng.xml 里分别将两个测试类写入,然后运行。
以下是运行结果

问题出在红色框标示的地方
按照我的理解,@BeforeTest方法将 num 初始化后,classOneMethod 和 classTwoMethod 运行时,num 的值都应该保持,也就是说,classOneMethod 和 classTwoMethod 运行时,num 的值都为 0。但是实际运行结果是,classTwoMethod 运行时,num 的值为-1。
这一点我很不理解,请大神解答。


↙↙↙阅读原文可查看相关链接,并与作者交流