我正在学习使用TestNG进行IntelliJ IDEA 9。
据我了解,将测试放入名为name
的组中的一种方法是对其进行注释@Test(group = "name")
。要在每次测试之前运行方法,请使用@BeforeMethod
注释它。
在我的测试设置中,我希望在每个测试之前只在特定组中运行一个方法。因此,有一个方法beforeA
在组A
中的每个测试之前运行,方法beforeB
在每个B
测试之前运行,依此类推。
示例代码:
public class TestExample
{
@BeforeMethod(groups = "A")
public void beforeA()
{
System.out.println("before A");
}
@BeforeMethod(groups = "B")
public void beforeB()
{
System.out.println("before B");
}
@Test(groups = "A")
public void A1()
{
System.out.println("test A1");
}
@Test(groups = "A")
public void A2()
{
System.out.println("test A2");
}
@Test(groups = "B")
public void B1()
{
System.out.println("test B1");
}
@Test(groups = "B")
public void B2()
{
System.out.println("test B2");
}
}
我希望输出像
before A
test A1
before A
test A2
before B
test B1
before B
test B2
但我得到以下内容:
before A
before B
before A
before B
test A2
before A
before B
before A
before B
test B1
===============================================
test B2
===============================================
Custom suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================
IntelliJ IDEA突出显示了我的所有注释,其中包含“A组未定义”或“B组未定义”的信息。
我做错了什么?
答案 0 :(得分:16)
@BeforeMethod
和@AfterMethod
似乎已被群组破坏。资源:
答案 1 :(得分:2)
我让Intellij解决了这个问题。请检查问题:http://youtrack.jetbrains.net/issue/IDEA-67653 我们需要投票支持它,以便JetBrains解决它
答案 2 :(得分:2)
@BeforeMethod(groups =...)
不应该在每个IN IN GROUP方法之前运行。
它将在类中的每个方法之前运行。不同的是,它只属于一个特定的群体,仅此而已。 See DOCS
答案 3 :(得分:1)
正如TEH EMPRAH所提到的那样@BeforeMethod并不是假设在每个方法属于同一组之前运行。
为了实现这一点,您必须正确配置testng.xml。对于您的预期输出,它应该是这样的
<suite....>
<test name="A">
<groups>
<run>
<include name="A"/>
</run>
</groups>
<classes>
<class name="...TestExample"/>
</classes>
</test>
<test name="B">
<groups>
<run>
<include name="B"/>
</run>
</groups>
<classes>
<class name="...TestExample"/>
</classes>
</test>
</suite>