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

时间:2010-11-30 05:59:46

标签: java unit-testing testng

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

4 个答案:

答案 0 :(得分:44)

使用@BeforeMethod,而不是@BeforeTest。

@BeforeTest的含义在the documentation中解释。

答案 1 :(得分: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 :(得分:2)

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

根据我的经验:

  • 每个@BeforeTest方法只运行一次
  • 如果你有几个@BeforeTest方法,它们的执行顺序取决于包含那些@BeforeTest方法的类的顺序。

你可以通过设置一个简单的例子来测试它。

答案 3 :(得分:0)

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

<test>中所有类中的所有@befortests 将在该测试开始时执行