TestNG - Class级别测试注释的Dataprovider

时间:2012-01-17 11:00:33

标签: testng testng-dataprovider

我会尝试在这里解释我的情景,以便明确我想要的东西。

我在一个Class中有一组方法执行一些测试,它们彼此相关并且必须按顺序运行,因此它们在DependsOnMethod注释中有@Test个。我还使用DataProvider,每次测试返回7个值(n行和7列)。现在,当我将此数据提供程序放在方法级别时,它会读取所有行并使用每组可用数据执行方法1,然后转到下一个方法。

我想要更改此序列,我希望它运行方法1(数据集1),方法2(数据集1),方法1(数据集2),...我知道这是许多人的问题。我再次发布这个问题的原因是因为我尝试了所有建议的想法。

使用Factory注释时,它使我的测试在Eclipse中根本不启动,给出NullPointerException。我使用@BeforeClass注释,如果我使用工厂注释,它将永远不会运行。我在类的构造函数上给出了这个工厂注释。

我在testng.xml文件中尝试了group-by-instance标志,但也失败了:它以相同的顺序运行测试。

请有人能按照正确的顺序解释这件事吗?如果可能的话,举个例子,因为我确信这可以实现,但我想我错过了某个地方。

非常感谢任何帮助。

P.S。我对Java不太熟悉,过去2-3周我一直在使用TestNG。

谢谢, 约翰

2 个答案:

答案 0 :(得分:0)

使用anotation“DataSet”: JavaDoc:

org.unitils.dbunit.annotation.DataSet
@Target(value={METHOD, TYPE})
@Retention(value=RUNTIME)
@Inherited

注释,指示应在测试运行之前加载数据集。

如果对类进行注释,则在执行类中的每个测试方法之前将加载测试数据集。可以明确指定数据集文件名。如果没有指定这样的文件名,首先会尝试一个名为'classname'的数据集.'testmethod'.xml,如果不存在这样的文件,将尝试'classname'.xml。如果该文件也不存在,则抛出异常。以'/'开头的文件名被视为绝对值。不以'/'开头的文件名是相对于当前类的。

测试方法也可以使用DataSet进行注释,在这种情况下,您可以指定在运行此测试方法之前需要加载的数据集。同样,可以显式指定文件名,如果未指定,则使用默认值:first'classname'。'methodname'.xml,如果该文件不存在'classname'.xml。

示例:

 @DataSet
  public class MyTestClass extends UnitilsJUnit3 {

      public void testMethod1(){
      }

     @DataSet("aCustomFileName.xml")
      public void testMethod2(){
      }
  }

将在与该类相同的目录中为testMethod1加载名为MyTestClass.xml或MyTestClass-testMethod1.xml的数据集文件。对于testMethod2,加载了与该类相同的目录中名为aCustomFileName.xml的数据集文件。

  public class MyTestClass extends UnitilsJUnit3 {

      public void testMethod1(){
      }

     @DataSet
      public void testMethod2(){
      }
  }

不会为testMethod1加载任何数据集(没有类级数据集)。将为testMethod2加载名为MyTestClass.xml或MyTestClass.testMethod2.xml的数据集文件。 作者:

Filip Neven

蒂姆杜切尼

答案 1 :(得分:0)

最简单的方法是手动调用这些方法:

@Test(dataProvider = ...)
public void f(int n1, int n2) {
    method1(n1, n2);
    method2(n1, n2);
}

但是,按实例分组应该有效,您是否可以通过电子邮件将小类发送到testng-users列表,以便我可以重现它?

感谢。