gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:45:35 29 4
gpt4 key购买 nike

我正在尝试从 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 以编程方式设置它,使用 System.setProperty(String name,字符串值),以及System.getProperty(String name)

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

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

关于java - 将命令行参数传递给以编程方式运行的 JUnit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884163/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com