【问题标题】:create initial data for hibernate driven testing为休眠驱动测试创建初始数据
【发布时间】:2009-07-27 18:15:03
【问题描述】:

首先感谢大家阅读本文。 我想在每次运行测试类时填充我的数据库(derby),以便能够执行删除或更新或 deletebyid 等测试。 我用

<property name="hibernate.hbm2ddl.auto">create</property>

在我的 hibernate.cfg.xml 文件中,所以我希望每次运行测试时首先删除并创建数据库。 我使用了类构造函数或设置方法,但很快意识到它们被称为类中有测试方法的次数(我假设之前的测试和其余的行为相同)。 所以我的问题是如何设置要使用的初始数据? 感谢阅读。

【问题讨论】:

    标签: java unit-testing hibernate


    【解决方案1】:

    看看DbUnit,它是一个JUnit 扩展,旨在简化基于数据库的应用程序测试。它的一个特点是有一个预定义的数据集,它在测试开始时填充数据库。在这里查看更多 - http://www.dbunit.org/components.html#dataset

    【讨论】:

      【解决方案2】:

      假设JUnit 4:有两组注解,可用于在运行实际测试用例方法之前和之后触发代码执行:

      之前

      使用此标记注释的方法是 之前由 JUnit 框架执行 它调用下一个测试用例方法。

      之后

      使用此标记注解的方法由 JUnit 在 实际的测试用例方法已经运行。

      课前

      用这个注解标记的方法只会被执行一次(之前 JUnit 运行第一个测试用例)。如果我正确阅读了您的帖子,这 是您真正想要的选项。

      课后

      用这个注解标记的方法只会被执行一次(在 JUnit 运行 最后一个测试用例)。

      import org.junit.Before;
      import org.junit.BeforeClass;
      import org.junit.Test;
      
      public class SomeTest {
      
          @Test
          public void test1() {
              System.out.println("test1");
          }
      
          @Test
          public void test2() {
              System.out.println("test2");
          }
      
          @Before
          public void setUp() {
      
              // Here goes the code, which makes sure, all tests
              // see the same context
      
              System.out.println("setUp");
          }
      
          @BeforeClass
          public static void setUpGlobals() {
      
              // Expensive hibernate set-up will go here. It is
              // called only once
      
              System.out.println("setUpGlobals");
          }
      }
      

      将产生输出

      • setUpGlobals
      • 设置
      • 测试1
      • 设置
      • 测试2

      【讨论】:

        【解决方案3】:

        对于初始数据设置(使用 Dirk 描述的注释),我使用了两种不同的方法。如果我真的想测试包括 ddl 脚本在内的整个过程,我让我的 BeforeClass 通过执行操作系统进程并运行适当的命令来删除和创建该数据库类型来完全重新创建数据库。但大多数时候,我只是使用 Hibernate 或 SQL 删除在每个测试(或类)开始和结束时清除表。这不会测试 ddl 创建部分,但通常 Hibernate 配置和其他测试会指示您的数据库架构是否错误。

        【讨论】:

        • 你好!感谢您的回复,基于此,我想我已经意识到错误是什么。没有用于测试的其余方法的数据。我不确定 BeforeClass 是否插入任何东西。我已经推动插入测试方法中的初始数据并对其进行调试(因为我无法从之前的类中进行调试)并且当 hbm2ddl 设置为创建时,我可以看到数据已插入 b 删除前一个。所以我有点困惑如何让这些东西工作。我不能在 cmets 中发布我的代码有什么建议吗?
        • 现在我得到了一些东西!我已经将 hbm2ddl 设置为 create 并且我做了一个假断言让我的保存方法成功而没有实际保存任何东西,我可以在数据库中看到 BeforeClass 插入了什么但是一旦我真的从保存测试方法中保存了一个东西,它就会清除什么 BeforeClass插入。如何防止?我想追加它。
        猜你喜欢
        • 2021-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多