2013-06-29 48 views
0

我正在使用HSQLDB进行单元测试,我有一堆测试类,它们都扩展了一个抽象类MyAbstractTestBase。JUnit 4 - 在运行单元测试之前以编程方式创建HSQLDB表

class abstract MyAbstractTestBase 
{ 
    static 
    { 
     setUpDBTables(); 
    } 

    public static void setUpDBTables() 
    { 
     context = new ClassPathXmlApplicationContext(new String[]{ 
      "file:spring-configuration/unit-testing-config.xml" 
     }); 
     //InputStream inputStream = getClass().getClassLoader().getResourceAsStream("db/MY_TABLE.sql"); 
     DataSource dataSource = (DataSource)context.getBean("MyDataSource"); 

     namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); 

    } 
} 

这种方法主要问题是EntityManager的弹簧创建,

@PersistenceContext(unitName = MyConstants.ENTITY_MANAGER_FACTORY_UNIT_NAME) 
protected EntityManager entityManager; 

不会保留数据,没有异常要么抛出,但如果我尝试使用读一些数据“请选择”作品。

这是我的问题,如何在开始单元测试之前创建表格?这样我的entityManager将按预期工作。

此外,为什么我的entityManager没有保留任何记录,即使它没有抛出任何异常。

+0

我糊涂 - 如果你需要创建表,使您的代码运行,怎么是你工作的SELECT语句? – DaveH

+0

1.我可以创建表格。 2.我可以使用在抽象类中初始化的NamedParameterJdbcTemplate插入数据。 3.我无法使用entitymanager插入/保留数据。 4.我可以使用entityManager通过手动设置断点和插入记录来测试“选择”,或者使用NamedParameterJdbcTemplate –

回答

1

如果您使用的弹簧测试,我强烈建议您使用的方法从这样的回答:How to load DBUnit test data once per case with Spring Test

+0

谢谢,您在另一篇文章中的回答正是我期待的内容。不过,我还有一个问题。当我使用entityManager插入记录时,我无法从HSQLDB浏览器查询这些记录,而使用entityManager.createNativeQuery(“select * ...”)返回结果,这怎么可能? –

相关问题