3

我正在学习将 TestNG 用于 IntelliJ IDEA 9。

据我了解,在一个名为的组中进行测试的一种方法name是对其进行注释@Test(group = "name")。要在每次测试之前运行方法,请使用@BeforeMethod.

在我的测试设置中,我希望一个方法只在特定组中的每个测试之前运行。因此beforeA,在 group 中的每个测试之前运行一个方法,在每个测试之前运行A一个方法等等。beforeBB

示例代码:

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

4 回答 4

19
  1. 列表的顺序不好,这是 IntelliJ 的错。在命令行或使用 maven 运行测试,顺序将是正确的。
  2. @BeforeMethod似乎与@AfterMethod团体破裂。
  3. IntelliJ 记住您之前使用的组,如果您使用尚未记住的组,将显示消息“组 X 未定义”。只需在未定义的组上按alt+Enter即可记住它。

资源 :

于 2010-08-30T18:04:24.623 回答
3

我要求 Intellij 修复它。请检查问题:http: //youtrack.jetbrains.net/issue/IDEA-67653 我们需要为它投票,以便 JetBrains 修复它

于 2011-04-06T19:20:53.313 回答
3

@BeforeMethod(groups =...)不应该在组中的每个方法之前运行。它将在类中的每个方法之前运行。不同的是,它只属于一个特定的组,仅此而已。见文档

于 2013-07-05T09:51:00.150 回答
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>
于 2014-02-11T15:10:15.160 回答