Простая симуляция часов для тестирования проекта - PullRequest
0 голосов
/ 29 сентября 2011

Рассмотрите возможность тестирования проекта, который вы только что реализовали.В любом случае, если он использует системные часы, тестирование будет проблемой.Первое решение, которое приходит на ум, - это симуляция;вручную манипулируйте системными часами, чтобы обмануть все компоненты вашего программного обеспечения, чтобы поверить, что время идет так, как вы хотите.Как вы реализуете такое решение?

Мое решение: Использование виртуальной среды (например, VMWare Player) и установка Linux (я оставляю вам дистрибутив) и манипулирование часами виртуальной системы.создать иллюзию проходящего времени.Единственная проблема заключается в том, что часы работают, поскольку ваш код работает.Я сам ищу решение, которое действительно остановит время, и оно не изменится, если я не скажу.

Ограничения: Вы не можете ограничить список используемых компонентовв проекте, как они могут быть чем угодно.Например, я использовал функции даты / времени MySQL и хочу обмануть их, не внося никаких изменений в код MySQL (это слишком дорого, так как в итоге вы можете скомпилировать каждый компонент вашего проекта).

Ответы [ 4 ]

1 голос
/ 29 сентября 2011

Из вашего дополнительного объяснения в комментариях (может быть, вы добавите их в свой вопрос?) Мои мысли:

Возможно, вы уже решили 1 и 2, но они относятся к проблеме, если нетвопрос.

1) Это веб-приложение, поэтому вам нужно только позаботиться о часах вашего сервера.Не доверяйте никаким часам, которые контролируются клиентом.

2) Похоже, вам нужно только прошедшее время, а не абсолютное время.Поэтому, почему бы не отслеживать время начала и окончания запроса к серверу, а затем добавить прошедшее время сервера обратно к оставшемуся «банку времени» (или какому-то другому ограничению)?

3) Что касается тестирования, вам вообще не нужно заботиться о каких-либо реальных «часах».Как предлагает Гилберт Ле Блан, напишите обертку вокруг системных вызовов, которую вы затем сможете использовать для возврата фиктивных тестовых данных.Поэтому, если у вас есть метод getTime(), который возвращает текущее системное время, вы можете заключить его в другой метод или перегрузить его параметром, который возвращает произвольное смещение.

1 голос
/ 29 сентября 2011

Напишите небольшую программу, которая изменяет системные часы, когда вы хотите, и сколько вы хотите. Например, каждую секунду меняйте время на дополнительные 59 секунд.

Маленькая программа должна

  • Либо следите за тем, что он сделал, чтобы он мог отменить это
  • Используйте сетевой протокол времени, чтобы вернуть часы к старому значению (ссылка до, запомнить разницу, спросить позже, применить разницу).
1 голос
/ 29 сентября 2011

Инкапсулируйте ваши системные вызовы в их собственные методы, и вы можете заменить системные вызовы симуляционными вызовами для тестирования.

Отредактировано, чтобы показать пример.

Я пишу 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, вот простой метод инкапсуляции системного вызова.

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

Замените каждый экземпляр System.out.println в вашем коде на printConsole, и ваш системный вызов существует только в одном месте.

Переопределив или изменив инкапсулированные методы, вы можете проверить их.

0 голосов
/ 29 сентября 2011

Другим решением будет отладка и манипулирование значениями, возвращаемыми функциями времени, чтобы установить для них все, что вы захотите

...