IntelliJ IDEA + TestNG:在组中的每个测试之前运行方法

时间:2010-08-30 16:44:00

标签: intellij-idea testng

我正在学习使用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组未定义”的信息。

我做错了什么?

4 个答案:

答案 0 :(得分:16)

  1. 列表不是很好,这是intelliJ的错。在命令行或maven中运行测试,订单将是正确的。
  2. @BeforeMethod@AfterMethod似乎已被群组破坏。
  3. IntelliJ记住您之前使用过的组,如果您使用的组还没有被记住,则会显示“组X未定义”的消息。只需在未定义的组中输入 alt + 输入即可记住它。

  4. 资源:

答案 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>