运行 测试涉及在 Junit Suite 中 运行 时执行数据库操作的后台线程挂起

Running tests involves background theads performing db operations hungs when running inside a Junit Suite

背景
我们正在使用 Jersey 的 Spring / Hibernate(基于 JPA)/ Restful API 构建产品。在项目构建阶段,我们正在 运行 宁集成测试以确保所有 Restful API 的行为都符合预期。

最近,我们迁移到使用两个实体管理器,用于与此合并的另一个子产品。事情从此开始变得一团糟

我们的后台线程很少执行异步操作。最初,我们遇到了这些后台作业获取各自实体管理器工厂的问题。但是我们使用 OpenEntityManagerInViewFilter.

在一定程度上解决了这个问题

作为集成测试的一部分 运行,我们将启动 Jetty 服务器并将应用程序部署到那里进行测试。

当前问题场景
当 运行 这些测试单独涉及后台处理 时, 它们 运行 没问题。 由于我们进行了多项测试,启动和停止 Jetty 服务器导致测试持续时间过长 运行.

所以我们将所有测试分组在一个测试套件中,并在 surefire-plugin 中配置了这个套件。

单独工作的测试开始挂在套件中 运行ning 下。 测试套件设置如下。

@BeforeClass
public static void setUp()
{
// Startup of jetty server happens here
}

@AfterClass
public static void tearDown()
{
// Stopping of jetty server happens here
}

在个别测试中,我们将在@BeforeClass 方法中完成后台进程并在@Afterclass 方法中执行数据清理活动。

当 运行在测试套件中

任何配置/想法将不胜感激。

我的猜测是其中之一:

  1. 你没有正确模拟某些东西,你正在改变你在测试中使用的数据的状态
  2. 您正在对数据库执行一些测试无法执行的操作 "repair"(例如删除或重命名 table)
  3. 您在某处使用了一些静态变量,这些变量正在为您构建一个您不使用的状态机expect/want

如果您能说出测试失败的原因,那可能会有所帮助

问题似乎是由于连接在使用后没有从连接池返回。一旦我们开始增加 maximum.connection.pool.size 问题就停止了。

感谢您的所有评论