【问题标题】:Unit testing hibernate with IntelliJ, how to setup session context? Setup test mysql db with seeds使用 IntelliJ 进行单元测试休眠,如何设置会话上下文?使用种子设置测试 mysql 数据库
【发布时间】:2011-11-19 22:51:15
【问题描述】:

我有一个使用 IntelliJ 的 maven 项目,而且我对这两个项目都很陌生。

我现在有一个使用 hibernate 运行的 spring mvc 应用程序(我对此感到很兴奋!)。

现在,我来自 .net,所以对于 .net,我必须编写额外的代码来在我的单元测试项目中设置 sessionfactory 等,因为它不像 Web 应用程序那样会在第一次加载时生成然后也根据每个请求。

我怎样才能用hibernate做到这一点?我想使用 mysql,但让它使用不同的数据库,例如:appname_test

顺便说一句,在使用 maven 项目时,IntelliJ 是否在内部使用 maven 命令来构建和运行测试?

我是否可以隔离我的测试并使用 maven 命令行运行特定文件?

【问题讨论】:

    标签: java hibernate junit intellij-idea


    【解决方案1】:

    由于您使用的是 spring,您可以使用不同的数据源配置另一个会话工厂进行测试,并在测试用例中使用该配置文件。它全部注入,因此您不必编写额外的代码,只需一些配置。

    Maven 插件确实使用与命令行相同的命令。最终,您的测试将如何运行将取决于您如何配置 pom.xml。假设您正在使用 surefire 插件来运行测试,您当然可以定义要使用的类(套件?),尽管我更喜欢在一个文件夹中运行所有测试。

    【讨论】:

    • 所以这就是使用 spring 的好处,它为 web 应用程序和控制台应用程序/单元测试以不同的方式自动构建会话上下文。
    【解决方案2】:

    在 maven 中,src/main/ 用于主代码,scr/test/ 用于测试。您可以在两者中拥有相同的文件/类,并且在测试期间后者具有优先权。

    它与 IDE 无关,IntelliJ 只是导入 maven 的项目。同时,所有 maven 项目都可以独立于 IDE 运行。

    【讨论】:

      【解决方案3】:

      如果您使用 hibernate.cfg.xml 文件来配置 Hibernate,您需要将其副本放在 src/test/resources 中并将其更改为指向您的 junit 数据库。

      如果您使用 persistence.xml,您可以将其复制到 src/test/resources 或添加到现有的。无论哪种方式,给它一个唯一的持久性单元名称,并在运行时加载它时通过该名称引用它。

      我总是不得不编写代码来在单元测试中启动 SessionFactory/EntityManager。我通常会设置一个基类来执行此操作,然后为每个需要使用 Hibernate 的测试扩展它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多