【问题标题】:Pass parameters to JUnit test from the TestSuite class将参数从 TestSuite 类传递给 JUnit 测试
【发布时间】:2015-03-23 13:43:39
【问题描述】:

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

我为此使用 testSuites 的原因是:

  1. 我可以把所有的具体参数放在测试套件类中
  2. 我可以重用测试类
  3. 我可以选择运行哪个测试套件。我不希望所有测试总是使用所有可能的参数运行!

问题是我不能真正传递参数。我了解 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 中传递配置的方法,但我没有使用任何特殊的框架。

【问题讨论】:

    标签: java junit


    【解决方案1】:

    嗯,这有点不合常规,但您可以在每个套件运行的开头添加一个不同的测试类,以设置您要用于该测试的参数。所以你会有这样的课程:

    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 跑步者是否需要这样做。

    【讨论】:

      【解决方案2】:

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

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

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

      例如,如果您将属性命名为 env.properties,那么您的命令将是:

       %java -Denv.properties=prod.config runMyTests
      

       %java -Denv.properties=dev.config runMyTests
      

      【讨论】:

      • 你知道在Eclipse中运行单元测试时如何传入配置文件吗?我需要两个配置文件,一个用于套件 A 和套件 B,但是我如何告诉我 testrunner 使用 A 或 B?
      • @user1884155 是的。如果你去运行配置... 然后编辑配置。 JRE 选项卡有一个用于输入 VM 参数的文本区域。这就是您要添加 -D 选项的位置(包括 "-D" )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      相关资源
      最近更新 更多