繁体   English   中英

将命令行参数传递给以编程方式运行的JUnit测试用例

[英]Pass command line arguments to JUnit test case being run programmatically

我正在尝试使用以下命令从Java类运行JUnit测试:

    JUnitCore core = new JUnitCore();
    core.addListener(new RunListener());
    core.run(classToRun);

问题是我的JUnit测试需要当前在JUnit测试本身中进行硬编码的数据库连接。

我正在寻找的是一种以编程方式(上面)运行JUnit测试的方法,但是将数据库连接传递给我在运行测试的Java类中创建的数据库连接,而不是在JUnit类中进行硬编码。

基本上像

    JUnitCore core = new JUnitCore();
    core.addListener(new RunListener());
    core.addParameters(java.sql.Connection);
    core.run(classToRun);

然后在classToRun中:

@Test
Public void Test1(Connection dbConnection){
    Statement st = dbConnection.createStatement();
    ResultSet rs = st.executeQuery("select total from dual");
    rs.next();
    String myTotal = rs.getString("TOTAL");
    //btw my tests are selenium testcases:)
    selenium.isTextPresent(myTotal);
}

我知道@Parameters,但是它似乎在这里并不适用,因为它更多地用于使用不同的值多次运行同一测试用例。 我希望所有测试用例共享一个数据库连接,该连接通过配置文件传递到Java客户端,然后该Java客户端运行这些测试用例(也通过配置文件传递)。

这可能吗?

PS我理解这似乎是一种奇怪的处理方式。

您可以使用java系统属性来实现此目的。

只需在junit命令行中通过-Dconnectionstring=foobar传递您所需的-Dconnectionstring=foobar ,或使用java api作为系统属性,以System.setProperty(String name, String value)System.getProperty(String name)编程设置。

在测试中,您可以使用@Before@BeforeClass基于此属性设置公共对象,这取决于您是否希望为每个测试运行一次设置(在这种情况下,您可以使用类成员)还是为每个测试运行一次套件(然后使用静态成员)。

您甚至可以通过使用所有测试用例都可以扩展的抽象类来分解这种行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM