我想知道@BeforeMethod
与组的用法。在http://testng.org/javadoc/org/testng/annotations/BeforeMethod.html 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 默认为 false 的事实之外,任何人都可以向我解释为什么在每次测试之前都会调用两个 before 方法,而忽略组吗?像 @Test(skipBeforeMethod = "setUpG1") 这样的东西也可以工作。
我正在使用 IntelliJ IDEA CE 10.5.2。我也用 gradle 1.0-milestone-3 运行它。
那是因为groups
flag 仅指示方法是否属于组。当启用该组时,它将始终执行,即在所有测试方法之前执行,无论测试方法所属的组如何。默认情况下,所有组均已启用。
如果您想让该方法仅针对某些组的测试执行,则需要指定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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)