数据库未在单元测试之间丢弃

时间:2009-11-10 19:02:33

标签: java unit-testing hibernate jpa spring

你好的人我在测试中遇到了一个奇怪的行为。我正在JPA hibernate annotation使用spring。 假设我有一个MyObject类,它的属性电子邮件被发送

@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("some@email.com");
  ....

  ....
  ob2.setEmail("someother@email.com");
  ....
  dao.save(ob1);
  dao.save(ob2);

}

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

2 个答案:

答案 0 :(得分:1)

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

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

你在某个地方调用SessionFactory.close()吗?如果您使用的是hibernate.hbm2ddl.auto=create-drop,则应处理删除数据库的问题。

答案 1 :(得分:1)

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