我有几个无状态会话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?
答案 0 :(得分:3)
我不知道你正在使用什么样的构建工具。
在Maven中,运行时和测试资源之间存在分离:
project
|- src/main/resources
|- src/test/resources
src/test/resources
中的那些未包含在您的最终工件中,并且仅在构建的测试阶段由单元测试插件(Surefire)使用。
无论使用什么工具,我建议您在资源之间进行这种分离,以便能够实现您正在寻找的结果。