你好的人我在测试中遇到了一个奇怪的行为。我正在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。但仍然。我只是不明白。我已经在很多项目中使用了这个,当然没有唯一的但我希望每次运行测试方法时都会删除数据库。我应该注意哪些独特的东西?谢谢你的阅读。请给我你的建议。我遗漏了什么或没有做过什么?
答案 0 :(得分:1)
在每次测试之后(或最好在之前),您是否应该有一些代码来删除/删除单元测试数据库?你确定你真的在创建数据库吗?你正在使用什么数据库引擎?
如果您使用的是基于内存的数据库,是否在正确的位置初始化(每次执行测试时)?
你在某个地方调用SessionFactory.close()吗?如果您使用的是hibernate.hbm2ddl.auto=create-drop
,则应处理删除数据库的问题。
答案 1 :(得分:1)
你错过了@After method,这就是你看到这种行为的原因。运行jUnit 4.x测试时,整个套件一个接一个地在一个线程中运行,这意味着您必须自己清除状态或发生未指定的行为,通常资源会挂起并导致其他单元测试的副作用。