将命令行parameter passing给以编程方式运行的JUnittesting用例

我试图从Java类运行JUnittesting:

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

问题是我的JUnittesting需要一个在JUnittesting本身当前硬编码的数据库连接。

我正在寻找的是一种以编程方式运行JUnittesting的方法(上图),但将一个数据库连接传递给我,在我的Java类中创build,运行testing,而不是在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有所了解,但在这里似乎并不适用,因为它更多地用不同的值运行相同的testing用例。 我希望我所有的testing用例都能共享一个数据库连接,通过configuration文件传递给我的java客户端,然后运行这些testing用例(也通过configuration文件传入)。

这可能吗?

PS我明白这似乎是一个奇怪的做事方式。

你可以使用java系统属性来实现这一点。

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

在你的testing中,你可以使用@Before或者@BeforeClass来设置基于这个属性的公共对象,等待你是否为每个testing运行一次(在这种情况下你可以使用类成员),或者每次运行一次套件(然后使用静态成员)。

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