2009-11-10 63 views
0

你好,我在测试中遇到了一个奇怪的行为。我使用JPA hibernate annotationspring。 让说,我有一个类MyObject来和它的属性电子邮件marqued数据库没有在单元测试之间掉线

@Column(name="EMAIL", length=100, unique=true) 
private String email; 

我准备什么,我需要在数据库中该类MyObjectDAOImplTest

@Autowired 
MyObject1 ob1; 
@Autowired 
MyObject1 ob2; 

@Before 
public void setUP(){ 
    dao = manager.createthedao(); 

    .... 
    ob1.setEmail("[email protected]"); 
    .... 

    .... 
    ob2.setEmail("[email protected]"); 
    .... 
    dao.save(ob1); 
    dao.save(ob2); 

} 

所以我的一个部分的设置从第一种测试方法来看,所有的reste都是failling.I是关于邮件列上的重复值,但是我的hbm2ddl.auto = create,我甚至使用了create-drop。但仍然。我只是不明白。我已经在很多项目中使用过这个,当然没有,但是我希望每次运行一个测试方法时都会删除数据库。是否有关于独特的我应该注意的事情?感谢你的阅读。给我你的建议。我是否遗漏了一些东西或者没有做到一些?

回答

1

你错过了@After method这就是你看到这种行为的原因。在运行jUnit 4.x测试时,整个套件会一个接一个地运行在单个线程中,这意味着您必须自己清除状态或发生未指定的行为,通常资源会挂起并导致其他单元测试的副作用。

+0

mmmh不知道是这种情况。我已经完成了这个工作。但在我看来,这是我的工作,因为我认为我不应该这样做 – 2009-11-10 20:23:36

1

在每次测试之后(或最好在每次测试之前),您是否不应该有一些代码来删除/删除单元测试数据库?你确定你实际上是在创建数据库吗?你使用的是什么数据库引擎?

如果您正在使用一些基于内存的数据库,您是否在正确的位置初始化它(每次执行测试)?

你在调用SessionFactory.close()吗?如果您使用的是hibernate.hbm2ddl.auto=create-drop,则应该处理数据库的丢失。

+0

感谢您的答复,这里是我hsql.jdbc.properties jdbc.driverClassName = org.hsqldb.jdbcDriver jdbc.username = SA jdbc.password = jdbc.url =的jdbc:HSQLDB:文件:MYDB;创建= true 我已经切换到mysql,因为这个问题。当使用hbm2ddl.auto = create-drop进行测试,然后我评论了我的所有测试方法,但是第一个。并且看到数据库在我刷新数据库后下降浏览器。 – 2009-11-10 19:18:53

+0

请将所有相关的配置文件添加到您的问题。 – 2009-11-10 19:26:08

+0

btw。也许你应该考虑使用内存模式进行测试。 (jdbc.url = jdbc:hsqldb:mem:mydb; create = true)...它应该更快。 – varad 2009-11-11 20:23:04

相关问题