Java 从TestSuite类向JUnit测试传递参数

Java 从TestSuite类向JUnit测试传递参数,java,junit,Java,Junit,我想创建2个JUnit测试套件。它们都使用相同的测试类,但它们都应该使用不同的参数。例如,在测试套件A中,我希望从文件A收集数据并写入数据库A。在测试套件B中,我希望从文件B收集数据并写入数据库B 为此,我使用TestSuite的原因是: 我可以将所有特定参数放在testsuite类中 我可以重用TestClass 我可以选择运行哪个测试套件。我不希望所有的测试总是使用所有可能的参数运行 问题是我无法真正传递参数。我理解参数化类使用JUnit的方式,但它不允许上面列表中的第3点。如果我使用下面的

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

为此,我使用TestSuite的原因是:

  • 我可以将所有特定参数放在testsuite类中
  • 我可以重用TestClass
  • 我可以选择运行哪个测试套件。我不希望所有的测试总是使用所有可能的参数运行 问题是我无法真正传递参数。我理解参数化类使用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 }
            });
    
    
        }
    
    @RunWith(值=参数化的.class)
    公共类TestCheckData
    {
    私有文件;
    私有数据库源数据库源;
    公共TestCheckData(文件文件、数据库源数据库源)
    {
    this.file=文件;
    this.databaseSource=数据库源;
    }
    @参数
    公共静态可编辑数据1()
    {
    返回Arrays.asList(新对象[][]
    {
    {TestSuiteA.DATA_文件_A,TestSuite1.DATABASE_A},
    {TestSuiteB.DATA_FILE_B,TestSuite1.DATABASE_B}
    });
    }
    

    我已经找到了一些在spring环境中传递配置的方法,但我没有使用任何特殊的框架。

    好吧,这会有点不合常规,但您可以在每个套件运行的开始添加不同的测试类,以设置您想要用于该测试的参数。因此,您可以使用以下类:

    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
    运行程序是否需要该条目。

    您可以修改测试,以便它们从配置文件获取参数。这样您就可以uld始终只有一个套件

    可以通过系统属性查找配置文件的路径

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

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

     %java -Denv.properties=prod.config runMyTests
    


    etc

    您知道在Eclipse中运行单元测试时如何传入配置文件吗?我需要两个配置文件,一个用于套件A,一个用于套件B,但我如何告诉testrunner使用A或B?@user1884155是的。如果您要运行配置…则编辑配置。JRE选项卡有一个文本区域用于输入VM参数。这就是是要添加的
    -D
    选项(包括“-D”)的放置位置
     %java -Denv.properties=dev.config runMyTests