【问题标题】:Running tests involves background theads performing db operations hungs when running inside a Junit Suite运行测试涉及执行数据库操作的后台线程在 Junit Suite 中运行时挂起
【发布时间】:2015-02-26 08:30:31
【问题描述】:

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

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

我们有后台线程,它们异步执行很少的操作。最初,我们面临这些后台作业的问题,以获取它们各自的实体管理器工厂。但我们使用 OpenEntityManagerInViewFilter 在一定程度上解决了这个问题。

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

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

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

单独运行的测试开始挂在套件内运行。 测试套件设置如下。

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

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

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

我对测试如何正常工作感到有点奇怪,因为个人在测试套件中运行时开始引起问题

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

【问题讨论】:

  • 你的测试是否命中了码头服务器 - 任何日志?
  • 是的。他们正确地访问了服务器...信息:根 WebApplicationContext:初始化在 41869 毫秒内完成 2015 年 2 月 26 日下午 2:20:30 org.glassfish.jersey.server.ApplicationHandler 初始化信息:启动 Jersey 应用程序,版本 Jersey:2.5。 1 2014-01-02 13:43:00...

标签: java spring hibernate jpa junit


【解决方案1】:

我的猜测是它是其中之一:

  1. 您没有正确模拟某些内容,并且正在更改您在测试中使用的数据的状态
  2. 您正在对数据库执行一些测试无法“修复”的操作(例如删除或重命名表)
  3. 您在某处使用了一些静态变量,这些变量正在为您构建一个您不期望/不想要的状态机

如果你能说出测试是如何失败的,那可能会有所帮助

【讨论】:

  • 没有这样的错误。它只是挂在那里等待一些后台处理完成。但它在测试套件中无限等待
【解决方案2】:

这个问题似乎是因为连接在使用后没有从连接池返回。一旦我们开始增加 maximum.connection.pool.size,问题就会停止发生。

感谢你们所有的cmets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多