Java 带组的TestNG before方法
我想知道Java 带组的TestNG before方法,java,testng,Java,Testng,我想知道@beforethod在群组中的用法。信中说: alwaysRun:如果设置为true,则无论该配置方法属于哪个组,都将运行该配置方法 因此,我有以下课程: public class BeforeTest { private static final Logger LOG = Logger.getLogger(BeforeTest.class); @BeforeMethod(groups = {"g1"}, alwaysRun = false) public void setUpG1()
@beforethod
在群组中的用法。信中说:
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运行了它。您如何调用TestNG?你们有团队吗
如果不运行任何方法,则两个@before方法都将运行。如果您运行“g1”,则只有setupG1将运行,等等。我建议不要使用alwaysRun=true,而是为配置方法创建一个特殊组(我们使用“config”),并用groups=“config”注释所有在*()之前和之后的方法 所有测试方法都可以用您喜欢的任何一组进行注释,例如“foo”和“bar” 然后,在跑步过程中,你会:
-Dgroups=config,foo
或
如果随后添加另一个组“newGroup”,则不必遍历所有配置方法并向其中添加“newGroup”,只需运行:
-Dgroups=config,newGroup
这使得组的管理更加容易
如果您(错误地?)运行了以下内容:
-Dgroups=config,nonExistingGroup
没有测试(也没有配置方法)会运行,因为您实际上没有为“不存在的组”注释任何测试,只有当存在需要运行这些配置方法的“匹配测试”时,配置方法才会运行。这是因为
组
标志仅指示方法是否属于组。启用该组时,始终执行该组,即在所有测试方法之前执行,而不考虑测试方法所属的组。默认情况下,所有组都处于启用状态
如果希望仅对特定组的测试执行该方法,则需要指定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()
我运行none,认为分组是一种过滤,因此具有特定组的beforeMethod只适用于具有相同组的测试。我想我错了。我需要做的是类似于此处的解决方案(),但该解决方案的问题是,如果有许多测试依赖于f1,则mResult不会重置。
BeforeMethod G1
g1Test()
BeforeMethod G2
g2Test()