将参数传递给TestSuite类的JUnit测试

时间:2015-03-23 13:43:39

标签: java junit

我想创建2个JUnit TestSuite。它们都使用相同的测试类,但它们应该使用不同的参数。例如,在测试套件A中,我希望从文件A收集数据并将其写入数据库A.在测试套件B中,我希望从文件B收集数据并将其写入数据库B.

我之所以使用testSuites是因为:

  1. 我可以将所有特定参数放在testsuite类中
  2. 我可以重复使用测试类
  3. 我可以选择运行哪个测试套件。我不希望所有测试总是与所有可能的参数一起运行!
  4. 问题是我无法真正传递参数。我理解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中传递配置的方法,但我没有使用任何特殊的框架。

2 个答案:

答案 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;
  }
}

然后,您只需在套件列表中设置Suite1ParamsSuite2Params。您可能需要在params类中添加假@Test条目,我不确定Suite转轮是否需要该条目。

答案 1 :(得分:0)

您可以修改测试,以便从配置文件中获取参数。这样你就永远只有1套房。

可以通过System属性查找配置文件的路径。

然后在调用测试套件时,您可以通过使用JVM上的-D选项更改属性来传入不同的配置文件。

因此,例如,如果您命名为proprerty env.properties,那么您的命令将是:

 %java -Denv.properties=prod.config runMyTests

 %java -Denv.properties=dev.config runMyTests