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

2022-09-01 07:34:20

我正在尝试使用@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的含义在文档中进行了解释。


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

P.S. 抱歉我的英语:)


推荐