2009-07-27 68 views
0

首先感谢大家阅读本文。 我想每次运行测试类时都要填充我的数据库(derby),以便能够执行像delete或update或deletebyid这样的测试。 我用为休眠驱动测试创建初始数据

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

在我的hibernate.cfg.xml文件,所以我很期待数据库是第一降,每次创建运行测试。 我使用了类构造函数或者设置方法,但是很快就意识到它们被称为在类中有一个测试方法的时间(我假设beforetest和其他行为相同)。 所以我的问题是我如何设置初始数据来使用? 感谢您的阅读。

回答

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
+0

非常感谢你的解释。谢谢你 – 2009-07-27 18:50:42

0

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

+0

你好!感谢您的回复,并基于这一点,我认为我已经意识到了什么是错误。没有数据的其余方法来测试。我不确定BeforeClass插入任何东西。我推动插入testmethod中的初始数据并进行调试(因为我无法从beforeclass调试),而hbm2ddl被设置为创建时,我可以看到数据被插入b删除前一个。所以我有点混淆如何让这些东西work.i不能张贴我的代码里面的评论太任何建议? – 2009-07-28 10:40:47