【问题标题】:Database not dropped in between unit test在单元测试之间没有删除数据库
【发布时间】:2010-12-15 04:28:35
【问题描述】:

大家好,我在测试中遇到了一个奇怪的行为。我正在使用 JPA hibernate annotationspring。 假设我有一个 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);

}

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

【问题讨论】:

    标签: java unit-testing hibernate jpa spring


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢这里的回复是我的 hsql.jdbc.properties jdbc.driverClassName=org.hsqldb.jdbcDriver jdbc.username=sa jdbc.password= jdbc.url=jdbc:hsqldb:file:mydb; create=true 因为这个问题,我已经切换到 mysql。当使用 hbm2ddl.auto=create-drop 进行测试时,我已经评论了我的所有测试方法,但第一个方法。在我刷新 db 浏览器后看到 db 下降.
    • 请将所有相关配置文件添加到您的问题中。
    • 顺便说一句。也许您应该考虑使用内存模式进行测试。 (jdbc.url=jdbc:hsqldb:mem:mydb;create=true)...应该更快。
    【解决方案2】:

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

    【讨论】:

    • mmmh 不知道是这样的。我终于做到了。但在我看来,这是我的工作,因为我认为我不应该这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多