Шаблон для проблемы текущей даты в модульных тестах - PullRequest
1 голос
/ 04 февраля 2011

Существует ли общепринятая модель знаний или идиома для решения проблемы, заключающейся в том, что код, использующий новую функцию Date (), чрезвычайно сложно выполнить модульным тестом?

Я знаю возможное решение (например, http://refactoringaspnet.blogspot.com/2010/02/unit-testing-code-which-is-dependent-on.html),но вопрос в том, существует ли общая модель и язык для этой проблемы.

Ответы [ 4 ]

1 голос
/ 04 февраля 2011

Что я иногда делаю, так это создаю интерфейс, который отвечает за возврат даты. например:

public interface ISystemClock
{
    DateTime GetCurrentDate();
}

затем его можно отключить, если это необходимо для модульных тестов.

0 голосов
/ 04 февраля 2011

Идея состоит в том, чтобы просто переместить все, что трудно проверить (т.е. трудно контролировать в целях модульного тестирования), за интерфейс.Затем добавьте фальшивку или макет, который дает вам необходимый контроль.

Пост блога, который вы указали в вопросе, по большей части верен. Однако лично я не стал бы делать последний шаг в созданииTestableClock, который создает зависимость.Я бы предпочел передать его в качестве аргумента ctor или параметра метода.

0 голосов
/ 04 февраля 2011

Вот и все. Вам придется издеваться / подделывать показания времени. Это может выходить за рамки только системного времени. У вас может быть общий интерфейс «среда», позволяющий вам контролировать другие недетерминированные факторы для вашего тестирования.

0 голосов
/ 04 февраля 2011

Если я не правильно понял ваши потребности, вы ищете "насмешливый":

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...