【问题标题】:How to use setup datasource for HSQL for junit test如何使用 HSQL 的设置数据源进行 junit 测试
【发布时间】:2023-03-21 13:38:01
【问题描述】:

我编写了一个存储库类,它采用javax.sql.DataSource 作为构造函数参数,并对其进行了一些基本的 CRUD 操作。我现在想为它编写junit测试。我想使用 HSQL 作为我的数据库进行这些测试,但我不确定如何按照我想要的方式设置数据库。使用 Spring 应用程序,我在我的应用程序上下文中放置了类似的内容以进行测试:

<jdbc:embedded-database id="dataSource">
    <jdbc:script location="classpath:mySQLForDB.sql"/>
</jdbc:embedded-database>

但是,我想要测试的不是 Spring 应用程序。代码中是否有设置数据源并从 sql 文件设置数据库的代码?基本上,在功能上等同于 Spring 对 &lt;jdbc:embedded-database&gt; 标记所做的事情。

【问题讨论】:

  • 好吧,如果它是针对您的存储库类的 junit 测试,我认为 Spring 仍然是一个有效的解决方案。只需使用您的存储库 bean 和可以放在 src/test/resource 文件夹中的 &lt;jdbc:embedded.database&gt; 创建一个测试应用程序上下文很简单,如果您只是将 Spring 依赖项添加到测试类路径,应用程序将不知道 Spring。
  • 我已经完成了这个思考过程。在最坏的情况下,我将只使用 Spring 进行测试,但如果可能的话,我宁愿不依赖 Spring 来运行测试。

标签: java unit-testing junit hsqldb


【解决方案1】:

你会考虑试试 h2 吗?

public static void main(String[] args) throws ClassNotFoundException,
        SQLException {
    Class.forName("org.h2.Driver");
    Connection conn = DriverManager.getConnection("jdbc:h2:mem:mytestdb",
            "sa", "");
    Statement st = conn.createStatement();
    st.execute("create table foo (id integer)");
    st.execute("insert into foo (id) values (1)");
    ResultSet rs = st.executeQuery("select * from foo");
    while (rs.next()) {
        int result = rs.getInt("id");
        System.out.println(result);
    }
    conn.close();
}

HSQL 有同样的方法,但没试过。 看this link

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多