【问题标题】:JUnit 4 - create HSQLDB tables programmatically before running unit testsJUnit 4 - 在运行单元测试之前以编程方式创建 HSQLDB 表
【发布时间】:2013-06-27 02:12:39
【问题描述】:

我正在使用 HSQLDB 进行单元测试,我有一堆测试类,它们都扩展了一个抽象类 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 没有抛出任何异常,却没有保留任何记录。

【问题讨论】:

  • 我很困惑 - 如果您需要创建表以使您的代码能够运行,那么您的 SELECT 语句是如何工作的?
  • 1.我能够创建表格。 2. 我可以使用在抽象类中初始化的 NamedParameterJdbcTemplate 插入数据。 3. 我无法使用 entitymanager 插入/保留数据。 4.我可以通过手动设置断点和插入记录或使用NamedParameterJdbcTemplate来测试使用entityManager的“选择”

标签: spring unit-testing testing junit hsqldb


【解决方案1】:

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

【讨论】:

  • 谢谢,您在另一篇文章中的回答正是我所期待的。不过,我有一个问题。当我使用 entityManager 插入记录时,我无法从 HSQLDB 资源管理器中查询这些记录,而使用 entityManager.createNativeQuery("select * ...") 返回结果,这怎么可能?
猜你喜欢
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
相关资源
最近更新 更多