我想知道@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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
BeforeMethod G1
BeforeMethod G2
g1Test()
BeforeMethod G1
BeforeMethod G2
g2Test()
Run Code Online (Sandbox Code Playgroud)
除了默认情况下我认为awaysRun是假的,有人可以向我解释为什么在每次测试之前都调用方法之前,忽略这些组?@Test(skipBeforeMethod ="setUpG1")之类的东西也可以.
我正在使用IntelliJ IDEA CE 10.5.2.我也用gradle 1.0-milestone-3运行它.
这是因为该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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
BeforeMethod G1
g1Test()
BeforeMethod G2
g2Test()
Run Code Online (Sandbox Code Playgroud)
你如何调用 TestNG?你有组织任何团体吗?
如果不运行,则两个 @BeforeMethods 都会运行。如果你运行“g1”,则只有 setupG1 会运行,等等......