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:带注释的方法将在属于 标记内的类的任何测试方法运行之前运行”。但他有两个测试。所以它应该运行两次吧?【参考方案2】:

“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 中列出?

Java项目中出现图下这个错误,目前已知是缺少org.testng.annotations.BeforeTest

Effective C++ 6.继承与面向对象设计