JUnit 4 - 在运行单元测试之前以编程方式创建HSQLDB表

时间:2013-06-29 10:44:37

标签: spring unit-testing testing junit hsqldb

我正在使用HSQLDB进行单元测试,我有一堆Test类,它们都扩展了一个Abstract类MyAbstractTestBase。

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);

   }
}

这种方法的主要问题是由spring创建的entityManager,

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

不会保留数据,也不会抛出任何异常,但如果我尝试使用“select”读取某些数据,它就会起作用。

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

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

1 个答案:

答案 0 :(得分:1)

如果您正在使用弹簧测试,我强烈建议您使用此答案中的方法:How to load DBUnit test data once per case with Spring Test