TestNg 在基类上的 @BeforeTest 每个夹具只发生一次
Posted
技术标签:
【中文标题】TestNg 在基类上的 @BeforeTest 每个夹具只发生一次【英文标题】:TestNg's @BeforeTest on base class only happening once per fixture 【发布时间】:2011-05-17 16:38:44 【问题描述】:我正在尝试使用 @BeforeTest 让代码...在每次测试之前运行一次。
这是我的代码:
public class TestBase
@BeforeTest
public void before()
System.out.println("BeforeTest");
public class TestClass extends TestBase
@Test
public void test1()
@Test
public void test2()
“BeforeTest”只打印一次,而不是两次。我做错了什么?
【问题讨论】:
【参考方案1】:使用@BeforeMethod,而不是@BeforeTest。
@BeforeTest 的含义在the documentation 中有解释。
【讨论】:
文档说“@BeforeTest:带注释的方法将在属于“BeforeTest”只打印一次,而不是两次。我做错了什么?
***对不起。我没有注意到你写的是 @BeforeTest ,但在你的例子中 @BeforeTest 几乎等于 @BeforeClass ,当你没有测试类时最好使用 @BeforeClass 。
@BeforeClass" 应该与您的测试方法在同一个类中声明,而不是不同!
//Example
package test;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class Tests
private String bClass;
private String bMethod1;
private String bMethod2;
@BeforeClass
public void beforeClass()
bClass = "BeforeClass was executed once for this class";
@BeforeMethod
public void beforeMetodTest1()
bMethod1 = "It's before method for test1";
@Test
public void test1()
System.out.println(bClass);
System.out.println(bMethod1);
@BeforeMethod
public void beforeMethodTest2()
bMethod2 = "It's before method for test2";
@Test
public void test2()
System.out.println(bClass);
System.out.println(bMethod2);
@BeforeClass 将执行一次,在这个类中的所有测试方法之前。 @BeforeMethod 将在测试方法之前执行,在它之前被写入。
@BeforeClass在测试类中可能只有一个,不同的是@BeforeMethod!(如果是@BeforeClass,它们是轮流执行的,但它不是一个正确的测试组合)
附:对不起我的英语:)
【讨论】:
【参考方案3】:根据documentation,一个带有@BeforeTest注解的方法在任何属于标签内类的@Test方法运行之前运行。
根据我的经验:
每个@BeforeTest 方法只运行一次 如果您有多个@BeforeTest 方法,它们的执行顺序取决于包含这些@BeforeTest 方法的类的顺序。您可以通过设置一个简单的示例来对此进行测试。
【讨论】:
【参考方案4】:如果您使用@beforeTest,该方法将在每个<test>
的开头运行一次(我们在测试套件xml 文件中指定)如果该测试包含该类
<test>
中的所有类中的所有@befortests 将在该测试开始时执行
【讨论】:
以上是关于TestNg 在基类上的 @BeforeTest 每个夹具只发生一次的主要内容,如果未能解决你的问题,请参考以下文章
TestNG中的BeforeTest和BeforeMethod有啥区别
TestNG中BeforeClass和BeforeTest的区别
当 @BeforeTest 方法失败时,为啥它没有在 testng-failed.xml 中列出?