[TestNg的@BeforeTest在基类上每个夹具只发生一次

问题描述 投票:30回答:4

我正在尝试使用@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”仅打印一次,不会打印两次。我在做什么错?

java unit-testing testng
4个回答
46
投票

使用@BeforeMethod,而不是@BeforeTest。

[BeforeTest的含义在the documentation中进行了解释。


3
投票

“ 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,则轮流执行,但这不是测试的正确组成)

P.S。对不起,我的英语:)


2
投票

根据documentation,在运行属于标记内部类的任何@Test方法之前,运行带有@BeforeTest注释的方法。

根据我的经验:

  • 每个@BeforeTest方法仅运行一次
  • 如果您有几个@BeforeTest方法,它们的执行顺序取决于包含那些@BeforeTest方法的类的顺序。
  • 您可以通过设置一个简单的示例进行测试。


0
投票

如果使用@beforeTest,则该方法将在每个<test>的开头运行一次(我们在测试服xml文件中指定)如果该测试包含该类

© www.soinside.com 2019 - 2024. All rights reserved.