如何编写 JUnit 测试用例来测试线程和事件

2022-09-02 12:48:24

我有一个java代码,可以在一个(主)线程中工作。从主线程中,我生成一个新线程,在其中进行服务器调用。服务器调用完成后,我正在新线程中执行一些工作,之后代码将加入主线程。

我正在使用eclipse Jobs来执行服务器调用。

我想知道,我如何为此编写JUnit测试用例。


答案 1

您可能需要重构代码,以便可以轻松对其进行测试。

我可以看到几个不同的测试区域:

  1. 线程管理代码:启动线程并可能等待结果的代码
  2. 在线程中运行的“工作线程”代码
  3. 多个线程处于活动状态时可能导致的并发问题

构建您的实现,以便您的线程管理代码对工作线程的详细信息是不可知的。然后,您可以使用模拟工作线程来启用线程管理的测试 - 例如,以某种方式失败的模拟工作线程允许您测试管理代码中的某些路径。

实现工作线程代码,以便它可以单独运行。然后,您可以使用服务器的模拟对此进行独立单元测试。

对于并发测试,Abhijeet Kashnia提供的链接将有所帮助。


答案 2

这就是 ConcurrentUnit 的创建目的。一般用法是:

  1. 生成一些线程
  2. 让主线程等待或休眠
  3. 从工作线程内部执行断言(通过 ConcurrentUnit,报告回主线程)
  4. 完成所有断言后,从其中一个工作线程恢复主线程

有关详细信息,请参阅并发单元页面。