我想创建2个JUnit TestSuite。它们都使用相同的测试类,但它们应该使用不同的参数。例如,在测试套件A中,我希望从文件A收集数据并将其写入数据库A.在测试套件B中,我希望从文件B收集数据并将其写入数据库B.
我之所以使用testSuites是因为:
问题是我无法真正传递参数。我理解Parameterized类与JUnit一起工作的方式,但它不允许上面列表中的第3点。如果我使用下面的代码,它将运行我的测试类与两个数据库连接,这不是我想要实现的。
@RunWith(value = Parameterized.class)
public class TestCheckData
{
private File file;
private DatabaseSource databaseSource;
public TestCheckData(File file, DatabaseSource databaseSource)
{
this.file = file;
this.databaseSource = databaseSource;
}
@Parameters
public static Iterable<Object[]> data1()
{
return Arrays.asList(new Object[][]
{
{ TestSuiteA.DATA_FILE_A, TestSuite1.DATABASE_A },
{ TestSuiteB.DATA_FILE_B, TestSuite1.DATABASE_B }
});
}
我已经找到了一些在spring上下文in this question中传递配置的方法,但我没有使用任何特殊的框架。
答案 0 :(得分:1)
嗯,这有点不合常规,但您可以在每个套件运行的开头添加一个不同的Test类,以设置您要用于该测试的参数。所以你有类似的课程:
public abstract class StaticParameters {
public static File dataFileToUse = null;
public static DatabaseSource databaseToUse = null;
}
public class Suite1Params extends StaticParameters {
@BeforeClass
public static void setParams() {
dataFileToUse = DATA_FILE_A;
databaseToUse = DATABASE_A;
}
}
public class Suite2Params extends StaticParameters {
@BeforeClass
public static void setParams() {
dataFileToUse = DATA_FILE_B;
databaseToUse = DATABASE_B;
}
}
然后,您只需在套件列表中设置Suite1Params
或Suite2Params
。您可能需要在params类中添加假@Test
条目,我不确定Suite
转轮是否需要该条目。
答案 1 :(得分:0)
您可以修改测试,以便从配置文件中获取参数。这样你就永远只有1套房。
可以通过System属性查找配置文件的路径。
然后在调用测试套件时,您可以通过使用JVM上的-D选项更改属性来传入不同的配置文件。
因此,例如,如果您命名为proprerty env.properties
,那么您的命令将是:
%java -Denv.properties=prod.config runMyTests
或
%java -Denv.properties=dev.config runMyTests
等