使用不同的持久性单元进行测试

时间:2011-07-18 08:33:38

标签: java java-ee jpa

我有几个无状态会话bean,我已经创建了单元测试。当我在嵌入式GlassFish容器中运行这些测试时,会使用我的项目的默认持久性单元,这是用于开发目的的本地MySQL数据库。但是,在运行单元测试时,我希望使用嵌入式Derby数据库,以便任何单元测试都不会使用模拟数据使数据库混乱。

在OpenEJB中,可以通过创建哈希映射并放置一些属性来覆盖persistence.xml,如下所示:

Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");

p.put("movie-unit.hibernate.hbm2ddl.auto", "update");
p.put("movie-unit.hibernate.dialect", "org.hibernate.dialect.HSQLDialect");

context = new InitialContext(p);

与Sun的实现相同或类似的东西可以在不同的数据库上运行单元测试吗?

编辑:我正在使用Ant来构建项目。我想在运行测试时可以复制测试persistence.xml,并复制常规persistence.xml以进行部署,但这看起来很笨拙。是否建议切换到Maven?

1 个答案:

答案 0 :(得分:3)

我不知道你正在使用什么样的构建工具。

在Maven中,运行时和测试资源之间存在分离:

project 
 |- src/main/resources
 |- src/test/resources

src/test/resources中的那些未包含在您的最终工件中,并且仅在构建的测试阶段由单元测试插件(Surefire)使用。

无论使用什么工具,我建议您在资源之间进行这种分离,以便能够实现您正在寻找的结果。