1

这是一个有趣的。

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

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

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

任何额外的细节都可以提供给一个点。我希望我已经提供了足够的信息,不需要提供实际代码。

4

1 回答 1

0

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

于 2013-02-06T11:12:41.617 回答