TestNG BeforeMethod with groups

时间:2011-10-29 15:47:18

标签: java testng

我想知道@BeforeMethod对群组的使用情况。在http://testng.org/javadoc/org/testng/annotations/BeforeMethod.html中它说:

  

alwaysRun:如果设置为true,则无论它属于哪个组,都将运行此配置方法。

所以我有以下课程:

public class BeforeTest {
private static final Logger LOG = Logger.getLogger(BeforeTest.class);
@BeforeMethod(groups = {"g1"}, alwaysRun = false)
public void setUpG1(){
    sleep();
    LOG.info("BeforeMethod G1");
}

@Test(groups = {"g1"})
public void g1Test(){
    sleep();
    LOG.info("g1Test()");
}

@BeforeMethod(groups = {"g2"}, alwaysRun = false)
public void setUpG2(){
    sleep();
    LOG.info("BeforeMethod G2");
}

@Test(groups = {"g2"})
public void g2Test(){
    sleep();
    LOG.info("g2Test()");
}


private void sleep(){
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
}

哪个输出:

BeforeMethod G1
BeforeMethod G2
g1Test()
BeforeMethod G1
BeforeMethod G2
g2Test()

除了默认情况下我认为awaysRun是假的,有人可以向我解释为什么在每次测试之前都调用方法之前,忽略这些组?像@Test(skipBeforeMethod =“setUpG1”)这样的东西也可以。

我正在使用IntelliJ IDEA CE 10.5.2。我也用gradle 1.0-milestone-3运行它。

3 个答案:

答案 0 :(得分:2)

你是如何调用TestNG的?你在运行任何团体吗?

如果你没有,那么@BeforeMethods都会运行。如果你运行“g1”,只会运行setupG1等...

答案 1 :(得分:2)

这是因为groups标志仅指示方法是否属于组。启用该组后,它将始终执行,即,在所有测试方法之前,无论测试方法属于哪个组。默认情况下,所有组均处于启用状态。

如果只想对某些组的测试执行该方法,则需要指定onlyForGroups

public class BeforeTest {

    private static final Logger LOG = Logger.getLogger(BeforeTest.class);

    @BeforeMethod(onlyForGroups = { "g1" })
    public void setUpG1() {
        sleep();
        LOG.info("BeforeMethod G1");
    }

    @Test(groups = { "g1" })
    public void g1Test() {
        sleep();
        LOG.info("g1Test()");
    }

    @BeforeMethod(onlyForGroups = { "g2" }, alwaysRun = false)
    public void setUpG2() {
        sleep();
        LOG.info("BeforeMethod G2");
    }

    @Test(groups = { "g2" })
    public void g2Test() {
        sleep();
        LOG.info("g2Test()");
    }

    private void sleep() {
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

输出为

BeforeMethod G1
g1Test()
BeforeMethod G2
g2Test()

答案 2 :(得分:0)

我建议不要使用alwaysRun = true,但是为配置方法创建一个特殊的组(我们使用" config"),并在*()和*()方法之后注释所有组= "配置"

所有测试方法都可以使用您喜欢的任何组进行注释,例如: "富"和" bar"。

然后,在你的跑步中,你做:

-Dgroups=config,foo

-Dgroups=config,bar

如果您再添加另一个组" newGroup",则不必通过所有配置方法并添加" newGroup"对他们来说,你只需要跑:

-Dgroups=config,newGroup

这样可以更轻松地管理小组!

如果你(错误地?)运行了类似的内容:

-Dgroups=config,nonExistingGroup

没有测试(并且没有配置方法)会运行,因为您实际上没有为" nonExistingGroup"注释任何测试。和配置方法仅在存在"匹配测试时才运行"需要这些配置方法才能运行。