对调度程序进行单元测试有哪些策略?

2022-09-04 02:57:03

这篇文章的开头是“单元测试多线程代码中的一些常见模式是什么?”,但我发现了一些关于SO的其他讨论,这些讨论普遍认为“It is Hard (TM)”和“It Depends (TM)”。因此,我认为缩小问题的范围会更有用。

背景 :我们正在实现一个简单的调度程序,它为您提供了一种在启动和停止作业时注册回调的方法,当然还可以配置调度的频率。目前,我们正在围绕java.util.Timer制作一个轻量级包装器。

方面

  • 我还没有找到一种方法来测试这个调度程序,只依靠公共接口(如, )。addJob(jobSchedule, jobArgs,jobListener)removeJob(jobId)

  • 如何根据指定的计划对作业调用的事实进行计时?


答案 1

您可以使用记录器对象来记录调度程序的每个单元测试中的顺序,时间和其他有用内容。测试很简单:

  1. 创建记录器对象
  2. 配置计划
  3. 执行单元测试
  4. 检查记录器对象是否与计划“兼容”

答案 2

还要记住的一件事是,您不需要测试计时器是否正常工作。你可以编写一个模拟版本的Timer(通过扩展类或使用EasyMock),它只是检查你是否正确调用它,甚至可能替换足够多的线程,你根本不需要线程。在这种情况下,如果作业侦听器有足够的回调来跟踪计划程序,则可能会比所需的工作更多。

要记住的另一件重要事情是,在测试调度程序时,请使用跟踪调度程序如何工作的自定义作业;测试计划作业时,请直接调用回调,而不是通过计划程序调用。您可能有一个更高级别的集成测试,该测试将两者一起检查,具体取决于系统。


推荐