java如何使用模拟对象来模拟日常程序?
我的程序有一个每日例行程序,类似于闹钟事件。比如说,当时间是下午2点(这是我电脑中的系统时间),为我做点什么
我想做的是加快测试周期(我真的不想等待4天查看每日例行程序并检查错误)我在wiki of Mock object上读到,作者确实提到了闹钟程序。我很高兴看到,但还是不知道怎么做
我不熟悉Mock Object,我正在用Java编程。所以JMock或EasyMock(或任何类似的)对我来说可能没问题
谢谢
你可以在下面搜索框中键入要查询的问题!
我的程序有一个每日例行程序,类似于闹钟事件。比如说,当时间是下午2点(这是我电脑中的系统时间),为我做点什么
我想做的是加快测试周期(我真的不想等待4天查看每日例行程序并检查错误)我在wiki of Mock object上读到,作者确实提到了闹钟程序。我很高兴看到,但还是不知道怎么做
我不熟悉Mock Object,我正在用Java编程。所以JMock或EasyMock(或任何类似的)对我来说可能没问题
谢谢
# 1 楼答案
无论何时需要获取当前时间,不要直接使用系统时钟-使用以下界面:
然后,您可以使用一个用于生产的系统时钟来实现这一点,并通过一个用于测试的假时钟,您可以将假时钟设置为您想要的任何时间
然而,您还需要模拟驱动系统的任何东西——您是在明确地等待特定的时间,还是有其他东西调用您的代码
# 2 楼答案
我真的很抱歉,因为你问起了java,而说到java,我要出去吃午饭,但一个解决方案是模拟DateTime对象,并将其设置为所需的时间
进来。NET它看起来像这样:
发件人:Dealing With Time In Tests
你提到的这个闹钟给出了一个模拟物体的例子。它实际上不是一个可以从模拟框架中使用的对象
# 3 楼答案
基本上,你在测试中所做的是伪造时钟事件。具体的方式在一定程度上取决于设计,以及您等待事件的方式,但为了保持简单(如果不是纯粹的话),我的方法是在触发时间事件时调用一个方法,然后测试这两个方面
首先是测试调用该方法,并查看定时事件是否达到预期效果。然后模拟该类(使用JMock,首选方法是将其作为接口,并让调用方法实现该接口)
然后将模拟传递给处理计时的类。在这里,我将再次抽象出线程/触发问题(例如检查系统时钟和启动线程),并让模拟返回基本上立即运行事件的值
然后让真正读取系统时钟并启动线程的代码尽可能小,这将是不在单元测试范围内的区域
# 4 楼答案
模拟与单元测试有关。对于您描述的功能,我将把触发器(在您的情况下是闹钟事件)与流程(无论您的“日常例行程序”在做什么)分开,并对流程功能进行单元测试
然后将注意力转向将调用流程功能的调度代码。我建议使用类似于Quartz的方法来实现这一点,但如果你打算扮演你自己的角色,那么单元测试可以与实际的系统时钟一起工作,前提是你根据系统时钟的当前值分配触发时间,因为你要测试的只是触发事件的发生