当前位置: 首页 > 面试题库 >

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

苏墨竹
2023-03-14
问题内容

我正在尝试通过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系统属性来实现此目的。

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

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

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



 类似资料:
  • 问题内容: 我从Eclipse项目构建了可运行的JAR,该项目处理给定的XML文件并提取纯文本。但是,此版本要求文件在代码中进行硬编码。 有没有办法做这样的事情 并让jar在xml文件上执行? 我已经四处查看,给出的所有示例都与在命令行上编译JAR有关,而没有一个处理传入参数。 问题答案: 为什么不 ? 只需修改您的参数即可接收论据并对其进行操作。 在命令行中指定完整路径。

  • 要启动Java程序,我可以传递如下参数: 在gradle命令行中有哪些好的方法可以做到这一点: 这是正在建造的。格雷德尔:

  • 如何将字符串的命令行参数传递给java main方法,以便调用另一个类中的特定方法? 我需要能够通过“java Statdriver mean”调用mean方法,或者“java Statdriver std”调用标准偏差方法,或者不传递任何参数将导致通过终端调用mean方法。 按我的方式做似乎不起作用。我认为我的问题在于如果,否则如果,否则循环。 这是我的密码:

  • 问题内容: 如何接收文件作为命令行参数? 问题答案: 仅传递文件的路径,在程序内部使用Java File类处理它 这将第一个参数作为文件路径:

  • 问题内容: 我有一个用Node.js编写的Web服务器,我想使用一个特定的文件夹启动。我不确定如何在JavaScript中访问参数。我正在像这样运行节点: 这是我的服务器代码。Node.js帮助说这是可能的: 如何在JavaScript中访问这些参数?不知何故我无法在网上找到此信息。 问题答案: 参数存储在 以下是有关处理命令行参数的节点文档: 是一个包含命令行参数的数组。第一个元素是’node’

  • 问题内容: 是否可以通过命令行将参数传递给MySQL脚本? 在此示例中,类似于@start_date的内容: 问题答案: 发现在网络上的答案在这里。 基本上,假设我们要运行以下查询: 我们可以这样传递“ start_date”和“ end_date”: