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

Java 将命令行参数传递给以编程方式运行的JUnit测试用例,java,selenium-rc,junit4,Java,Selenium Rc,Junit4,我正在尝试从Java类运行JUnit测试,该类具有: JUnitCore core = new JUnitCore(); core.addListener(new RunListener()); core.run(classToRun); 问题是我的JUnit测试需要一个数据库连接,该连接当前在JUnit测试本身中是硬编码的 我要寻找的是一种以编程方式运行JUnit测试的方法(如上所述),但要将我在运行测试的Java类中创建的数据库连接传递给它,而不是在JUnit类中进

我正在尝试从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系统属性来实现这一点

只需在junit命令行中使用
-Dconnectionstring=foobar
传递所需内容,或者使用java api for system properties通过
system.setProperty(String name,String value)
system.getProperty(String name)
以编程方式设置此属性

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


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

System.set/getProperty()方法足以将变量传递给正在运行的测试类。非常感谢。如果以这种方式传递参数-Dconnectionstring=foobar。如何在运行时提取它们?@TomKoptel您可以使用类似于
String value=System.getProperty(“connectionstring”)@tonio-我们如何通过Junit测试的eclipse运行配置中的-Dconnectionstring=foobar?我们还必须执行system.getproperty吗?@testerjoe2在eclipse中,您可以在“运行配置”面板中编辑要传递给测试的参数,如图所示,您只需向参数添加
-Dconnectionstring=foobar