java - Junit 测试具有数据库访问的多线程应用程序

标签 java database multithreading junit

这是一个有趣的。

我有一个在 tomcat 下运行并具有 servlet 访问权限的应用程序。底层实现使用ThreadPoolExecutor来分割任务,此时只是一个电子邮件分发器。我一直在添加 JUnit 测试,慢慢地将 cobertura 报告的代码覆盖率提高到几乎可以接受的水平。 有关 JUnit 测试的一些背景:

  1. 在@BeforeClass中,我正在设置在测试环境中有效的数据库连接查找上下文。
  2. 在 Servlet 测试中,我使用 HttpUnit 获取 InitationContext,然后获取 servlet 的实例。
  3. 然后,我调用 servlet 中完成所有工作的主要方法,并最终调用线程管理器以获取适当的分配方法,并使用之前定义的 ThreadPool。
  4. 问题发生在生成的线程中。使用 @BeforeClass 中创建的上下文设置,来自 servlet 的数据库访问工作得很好。线程无权访问该上下文,并且无法获取数据库连接信息,从而导致线程代码失败。

所以,底线是,有人知道如何测试需要数据库访问的线程代码吗?或者甚至是一种全新的单元测试方法,可以与需要数据库访问的多线程应用程序一起使用。

可以在某一点上提供任何其他详细信息。我希望我已经提供了足够的信息,不需要提供实际的代码。

最佳答案

我建议扩展发送到线程池的任务并将数据库上下文添加到扩展任务中,然后在您编写的新测试中获取上下文并使用它来访问数据库。 我希望它能回答您的问题,如果没有,请添加一些代码示例,以便我能够测试它。

关于java - Junit 测试具有数据库访问的多线程应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14656249/

相关文章:

java - 如何获取字节数组中的元素数量?

java - 在Java中导入相邻的包

mysql - 自动填充时间维度表

c# - 哪个线程最先进入临界区?

java - 在 Hadoop 集群中使用另一个类的静态变量

java - Android gridview/imageholder动态布局

java - Java中的静态方法可以使用对象实例来访问

mysql - 如何使用Mysql脚本将MySQL表中的数据解析到另一个表中

jQuery AJAX 调用数据库工作,但不按顺序

c# - 在C#中的循环内使用lock语句