Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单元测试之间未删除数据库_Java_Unit Testing_Hibernate_Jpa_Spring - Fatal编程技术网

Java 单元测试之间未删除数据库

Java 单元测试之间未删除数据库,java,unit-testing,hibernate,jpa,spring,Java,Unit Testing,Hibernate,Jpa,Spring,大家好,我在测试中遇到了一个奇怪的行为。我正在使用jpahbernate注释和spring。 假设我有一个类MyObject,它的属性email为marqued @Column(name="EMAIL", length=100, unique=true) private String email; 我准备在这个类的设置中我需要的数据库MyObjectDAOImplTest @Autowired MyObject1 ob1; @Autowired MyObject1 ob2; @Before

大家好,我在测试中遇到了一个奇怪的行为。我正在使用
jpahbernate注释
spring
。 假设我有一个类MyObject,它的属性email为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("some@email.com");
  ....

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

}

因此,我的第一个测试方法中的a部分所有reste都失败了。我想在电子邮件列中复制值,但我的hbm2ddl.auto=create,我甚至使用了create下拉列表。但仍然如此。我就是不明白。我在很多项目中使用过这个方法,当然没有unique,但是我希望每次运行测试方法时都会删除数据库。关于unique,我应该知道什么吗?谢谢阅读。给我你的建议。我是遗漏了什么还是没做什么?

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

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


您正在调用SessionFactory.close()吗?如果您使用的是
hibernate.hbm2ddl.auto=create drop
,则应该可以处理数据库的删除。

您缺少了这一点,这就是您看到这种行为的原因。在运行jUnit 4.x测试时,整个套件在一个线程中一个接一个地运行,这意味着您必须自己清除状态,否则会出现未指定的行为,通常资源会一直挂起,并对其他单元测试造成副作用。

感谢您的回复,这里是my hsql.jdbc.properties jdbc.drivercassname=org.hsqldb.jdbc驱动程序jdbc.username=sa jdbc.password=jdbc.url=jdbc:hsqldb:file:mydb;create=true由于这个问题,我已切换到mysql。当使用hbm2ddl进行测试时,auto=create drop,然后我对我的所有测试方法(第一个除外)进行了注释。在刷新数据库浏览器后,我看到数据库被删除。请将所有相关配置文件添加到您的question.btw。也许你应该考虑使用内存模式进行测试。(jdbc.url=jdbc:hsqldb:mem:mydb;create=true)。。。应该快一点。嗯,他不知道是这样。我终于做到了。但在我看来,这是我的工作,因为我认为我不应该这样做