0

我将在这里尝试解释我的场景,以便清楚我想要什么。

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

我想改变这个顺序,我想让它运行方法 1(数据集 1)、方法 2(数据集 1)、方法 1(数据集 2)……我知道很多人都有这个问题。我再次发布这个问题的原因是因为我已经尝试了所有建议的想法。

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

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

请问有人可以按正确的顺序为我解释整个事情吗?如果可能的话,举个例子,因为我确信这可以实现,但我想我在某处遗漏了一些东西。

对此的任何帮助将不胜感激。

PS我对Java不是很好,过去2-3周我一直在使用TestNG。

谢谢,约翰

4

2 回答 2

0

使用注释“DataSet”:JavaDoc:

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

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

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

测试方法也可以使用 DataSet 进行注释,在这种情况下,您可以指定在运行此测试方法之前需要加载的数据集。同样,可以明确指定文件名,或者如果未指定,将使用默认值:首先是 '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 的数据集文件。作者:

菲利普·尼文

蒂姆·杜切恩

于 2012-01-17T11:14:52.463 回答
0

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

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

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

谢谢。

于 2012-01-17T19:00:04.680 回答