将命令行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用例扩展的抽象类来分解这种行为。