为hibernate驱动的测试创建初始数据

时间:2009-07-27 18:15:04

标签: java unit-testing hibernate

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

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

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

3 个答案:

答案 0 :(得分:3)

看看DbUnit,这是一个旨在简化基于数据库的应用程序测试的JUnit扩展。其特征之一是具有预定义的数据集,该数据集在测试开始时填充数据库。点击此处了解更多信息 - http://www.dbunit.org/components.html#dataset

答案 1 :(得分:1)

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

<强>之前

  

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

<强>后

  

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

<强> BeforeClass

  

使用此注释标记的方法将仅执行一次(之前   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
  • setUp
  • test1
  • setUp
  • TEST2

答案 2 :(得分:0)

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