使用IntelliJ进行单元测试hibernate,如何设置会话上下文?使用种子设置测试mysql db

时间:2011-11-19 22:51:16

标签: java hibernate junit intellij-idea

我有一个使用IntelliJ的maven项目,我对两者都很新。

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

现在,我来自.net所以使用.net我必须在我的单元测试项目中编写额外的代码来设置sessionfactory等,因为它不像是一个Web应用程序,它在第一次加载时产生了一些东西。然后根据要求提供。

如何使用hibernate执行此操作?我想使用mysql,但让它使用不同的数据库,如:appname_test

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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