我的节目有每日惯例,类似于一个闹钟的事件。说,当它的下午2时(时间是该系统的时间,在我的电脑),做我的东西。

什么我想要做的是加速测试期间(我真的不想要等4天看的日常工作,并检查的错误。) 我读 wiki的嘲笑对象, 作家没有提闹钟的节目。我很高兴看到但仍然不知道如何做到这一点。

我是新来的嘲笑对象,并且我编程。所以JMock或EasyMock(或任何类似)可能好的给我。

感谢

有帮助吗?

解决方案

当你需要获取当前时间,不要直接使用系统时钟 - 使用一个接口,如:

public interface Clock
{
    long currentMillis();
}

您可以再与系统时钟进行生产实现这一点,并通过在测试中,在这里你可以设置假到任何你想要的时间是假的。

不过,您还需要模拟出无论在驾驶你的系统 - 你明确地等待一个特定的时间,或做别的事情打电话给你的代码

其他提示

我必须道歉因为你们已经问大约java和我出去吃午饭的时候爪哇,但一个解决方案是以模拟DateTime对象,并设定它所需的时间。

中。净它看起来像这样的东西:

public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

SystemTime.Now = () => new DateTime(2000,1,1);

自: 处理时间测试


...[A]n闹钟的节目,它会导致 铃响在一定的时间可能 获得当前时间从外面 世界。来测试这个,试验必须 等到报警的时间知道 它是否响起的铃铛 正确。如果一个模拟对象是使用 地方的真实目的,它可以 编程,以提供的钟响 时间(无论是实际上这段时间 或不是)这样的闹钟 程序可以被测试的隔离。

这个闹钟你在引用的是给一个例子嘲笑的对象。它实际上不是一个目的可以使用从模拟框架。

基本上,你在测试中做什么都是假的时钟事件。究竟如何一定程度上取决于设计,以及你是如何等待事件,而是保持简单(如果不是纯)我的办法是有一个在触发时间事件被调用的方法,然后测试双方这一点。

首先是测试调用该方法,看到的是定时事件做你的期望。然后嘲笑那类(JMock的优选方式是使一个接口,让你的呼叫方法实现该接口)。

您然后模拟传递到处理该定时的类。在这里,我将抽象出线程/触发的问题(如检查系统时钟和启动线程),并有嘲笑返回基本运行事件马上值。

然后保持真正的代码实际上读取系统时钟和启动该线程尽可能小,这将是并非下单元测试的区域。

嘲讽涉及单元测试。对于功能你所描述的(是做什么那是你的“日常”)我将会分离触发(在你的情况下,闹钟事件),从过程和单元测试过程的功能。

然后将你的注意力,以调度代码,将调用您的流程功能。我会建议使用像石英这个,但如果你要的的角色,你的-own 单元测试因为它可以与实际的系统时钟提供的分配基于所述系统时钟作为所有你将被测试为的当前值的触发时间的工作是,在触发事件发生。

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