Junit使用数据库访问测试多线程应用程序

时间:2013-02-01 22:38:22

标签: java database multithreading junit

这是一个有趣的。

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

  1. 在@ BeforeClass 中,我正在设置在测试环境中有效的数据库连接查找的上下文。
  2. 在Servlet测试中,我使用 HttpUnit 获取 InvocationContext ,然后获取servlet的实例。
  3. 然后,我调用servlet中执行所有工作的主方法,最后调用线程管理器以获取相应的分发方法,并使用之前定义的ThreadPool。
  4. 产生的线程中出现问题。使用@ BeforeClass 中创建的上下文设置,servlet的DB访问可以正常工作。线程无权访问该上下文,无法获取数据库连接信息,从而导致线程代码失败。
  5. 那么,底线,任何人都知道如何测试线程代码,想要数据库访问?甚至是一种全新的单元测试方法,可以与需要数据库访问的多线程应用程序一起使用。

    可以提供任何其他详细信息。我希望我提供了足够的信息,提供实际代码是不必要的。

1 个答案:

答案 0 :(得分:0)

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