先看代码
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。
这一点我很不理解,请大神解答。