我会尝试在这里解释我的情景,以便明确我想要的东西。
我在一个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。
谢谢, 约翰
答案 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列表,以便我可以重现它?
感谢。