此后,开始了"什么是一些共同的模式在单元的测试多线代码?", 但是我找到一些 其他的 讨论 在这样普遍同意,"这是硬(TM)"和"取决于(TM)".因此,我认为,降低范围的问题将更为有用。

背景 :我们正在执行一个简单的调度程序,为您提供了一种方法登记的回调,当开始,并停止作业,当然配频率的调度。目前,我们正在做一个轻型包装java。工具.定时器。

方方面面:

  • 我还没有找到一种方法来测试这个计划程序由仅仅依靠公共接口(喜欢的东西 addJob(jobSchedule, jobArgs,jobListener) , removeJob(jobId)).

  • 我怎么时间这一事实,工作被称为根据指定的计划?

有帮助吗?

解决方案

你可以使用 记录仪的对象 该记录的顺序、时间和其他有用的东西在每个单元的考验你的调度程序。该试验是简单的:

  1. 创建一个 记录仪的对象
  2. 配置计划
  3. 执行单位测试
  4. 检查记录的对象是"兼容的"时间表

其他提示

有一件事还要记住的是,你不需要测试,计时器的工作。你可以写一个模型版本的计时器(通过延类或者使用 EasyMock)是简单地检查你们叫它正确,甚至可能取代不够,你不需要在所有。在这种情况下,可能是更多的工作比需要的,如果你的工作听众具有足够回到轨道调度程序。

其他重要的是要记住的是,在测试的调度程序,使用定制的工作,跟踪调度工作;在测试计划的工作,呼吁将回调,直接而不是通过调度程序。你可以具有更高级别的集成试验,检查这两个在一起,取决于系统。

有很多的故障模式,这样的调度能够表现出,并且每个最有可能需要自己的检验情况。这些试验的情况下,很可能非常不同,因此,"它依赖。"

用于测试并发软件在Java在一般情况下,我建议该呈现从加拿大的医疗保健公司2007年: 测试并发软件.

测试,一个计划程序必须执行的工作,在准确的根据他们的日程安排,我将创建一个抽象的时间本身。我已经做了类似的东西在我的一个项目,在这里我有一个时间或时接口。默认的实施将MillisecondTime,但是在测试期间,我会换一个TickTime.这种实将允许我单元的测试,以控制时间的进展和通过多少。

这样,你可以写一个测试,一个工作计划运行一次,每次10打勾。那么你的测试只是进步的勾计和检查,以确保工作运行在正确的蜱。

有几种方法来测试并发码。

  • 运行相同的代码多次下载荷,一些错误只是偶尔出现,但可以显示出了始终如果重复进行的。
  • 储存结果的不同线/工作在收集诸如BlockingQueue.这会让你检查的结果在目前的线和完成以及时的方式(不丑陋的任意睡的声明)

如果你找到测试并发的困难的考虑重构目/部件,使他们更易于测试。

如果该调度程序委托给一个 ExecutorExecutorService 运行任务时,你可以使用依赖注射删除一个直接依赖于这种类型的 Executor, , 使用一个简单的单螺纹 Executor 测试的许多功能的调度程序 没有 并发症的真正多线程的代码。一旦你得到了这些测试试,你可以移动上的困难,但现在基本上降低在规模、任务的测试线的安全。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top