2

我尝试编写一个大型测试类。

我正在使用 Junit、Hibernate 和 TopLink 和 H2 数据库。在此之前,我使用 EJB3Unit(包括 Hibernate 和 H2)。

我的测试类有 57 种测试方法。如果我一次运行所有测试随机一个或多个测试失败。如果我单独运行每个测试,我不会出错。

有谁知道出了什么问题?以及如何防止这种情况发生?

  1. 对于每种测试方法,我都会创建一个具有不同名称的新内存数据库。
  2. 我创建了一个新的 entitymanagarfactory 和 entitymanagar 实例。
  3. 我已禁用二级缓存。
  4. 我通过脚本创建所有表(没有发生错误,所以数据库真的很新鲜)。
  5. 我做了一些数据库操作和测试。
  6. 我清除会话和时间。
  7. 我将所有对象放在内存数据库中
  8. 我关闭了数据库
  9. 我关闭了 em 和 emf。

我需要做更多吗?

非常感谢...

4

2 回答 2

1

It seems that there is dependency among the tests. ideally you should restore the database to its original state after each test by using a tearDown method (in JUnit 4, use the @After annotation).

If you're already doing that then the dependency is more subtle. To find out its cause I suggest you start doing a binary search on the tests: comment out half of your tests. If the random failure persists then comment out half of the remaining half (and so on). If the failure disappears then the problem is in the other half: uncomment and comment out the other half. This process will converge quite quickly.

Good hunting.

于 2010-01-14T17:12:56.897 回答
0

依赖性是这种随机失败的可能性。

另一个原因可能是集合中元素的顺序。一旦我正在编写测试并依赖于第一个元素。它没有排序,所以我不确定我问的对象是否总是相同的。

于 2010-02-12T14:08:59.633 回答