用于测试项目的简易时钟仿真

时间:2011-09-29 15:53:35

标签: simulation clock

考虑测试您刚刚实施的项目。如果它正在使用系统的时钟,测试它将是一个问题。想到的第一个解决方案是模拟;手动操作系统的时钟来欺骗软件的所有组件,以便相信时间按照您希望的方式进行。你如何实现这样的解决方案?

我的解决方案是: 使用虚拟环境(例如VMWare Player)并安装Linux(我将发行版留给您)并操纵虚拟系统的时钟以创建时间流逝的错觉。唯一的问题是,当代码运行时,时钟正在滴答作响。我,我自己,正在寻找一个解决方案,时间会实际停止,除非我告诉它,否则它不会改变。

约束: 您不能限制项目中使用的组件列表,因为它们可能是任何内容。例如,我使用了MySQL的日期/时间函数,我想在没有修改MySQL代码的情况下欺骗它们(因为你可能最终编译项目的每个组件,所以太费钱了。)

4 个答案:

答案 0 :(得分:1)

编写一个小程序,在您需要时更改系统时钟,以及您想要多少。例如,每秒钟,将时钟更换59秒。

小程序应该

  • 要么跟踪它做了什么,所以它可以撤消它
  • 使用网络时间协议将时钟恢复为旧值(之前参考,记住差异,然后询问,应用差异)。

答案 1 :(得分:1)

使用自己的方法封装系统调用,并且可以使用模拟调用替换系统调用以进行测试。

编辑以展示一个例子。

我写Java游戏。这是一个简单的Java Font类,它将游戏的字体放在一个地方,以防我决定稍后更改字体。

package xxx.xxx.minesweeper.view;

import java.awt.Font;

public class MinesweeperFont {

    protected static final String FONT_NAME = "Comic Sans MS";

    public static Font getBoldFont(int pointSize) {
        return new Font(FONT_NAME, Font.BOLD, pointSize);
    }

}

同样,使用Java,这是封装System调用的简单方法。

public static void printConsole(String text) {
    System.out.println(text);
}

使用System.out.println替换代码中的printConsole的每个实例,并且您的系统调用仅存在于一个位置。

通过覆盖或修改封装的方法,您可以测试它们。

答案 2 :(得分:1)

根据您在评论中的其他说明(也许你会冷添加到你的问题?),我的想法是:

你可能已经解决了1& 2,但它们与问题有关,如果不是问题。

1)这是一个Web应用程序,因此您只需关注服务器的时钟。不要相信客户控制的任何时钟。

2)您似乎只需要经过时间而不是绝对时间。因此,为什么不跟踪服务器请求开始和结束的时间,然后将经过的服务器时间重新添加到剩余的“时间库”(或任何约束条件)?

3)就测试而言,你根本不需要关心任何实际的“时钟”。正如Gilbert Le Blanc建议的那样,编写一个围绕系统调用的包装器,然后可以使用它来返回虚拟测试数据。因此,如果您有一个返回当前系统时间的方法getTime(),您可以将其包装在另一个方法中,或者使用返回任意偏移量的参数重载它。

答案 3 :(得分:0)

另一个解决方案是调试和操作时间函数返回的值,将它们设置为你想要的任何东西