Как выполнить модульное тестирование планировщика с помощью NUnit - PullRequest
0 голосов
/ 02 ноября 2011

Как выполнить модульное тестирование планировщика, используя NUnit, который может позволить возможность планирования, аналогичную расписанию Outlook?

Планировщик запрограммирован на отправку сообщений ежедневно / еженедельно / ежемесячно / ежегодно в определенное время или в определенный день недели / месяц.

Если я использую жестко закодированные даты, то после некоторого тестаслучаи потерпят неудачу.Также как проверить месячный и годовой график?

-

Ram

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

В какой-то момент ваш планировщик проверит текущую дату и сопоставит ее с запланированными элементами.

Если вы убедитесь, что часть 'Проверка текущей даты' отделена в другом компоненте, вы можете переключить это поведение в своих модульных тестах и ​​позволить ему возвращать указанную дату.

открытый интерфейс IDateTimeManager { DateTime GetCurrentDateTime (); }

    class ProductionDateTimeManager : IDateTimeManager
    {
        public DateTime GetCurrentDateTime()
        {
            throw new NotImplementedException();
        }
    }

    public class Scheduler
    {
        public Scheduler(IDateTimeManager dateTimeManager)
        {
            this.DateTimeManager = dateTimeManager;
        }

        public Scheduler()
        {
            this.DateTimeManager = new ProductionDateTimeManager();
        }

        public void Execute()
        {
            DateTime current = DateTimeManager.GetCurrentDateTime();
        }

        private IDateTimeManager DateTimeManager { get; set; }
    }
1 голос
/ 02 ноября 2011

Абстрагируйте проверку даты и времени планировщика в отдельный интерфейс.Имейте класс, который реализует этот интерфейс для вашего живого кода / среды (с использованием DateTime или того, что используется в настоящее время) и класс, который реализует его для вашей среды тестирования, что позволяет вам ускорить / изменить время.Таким образом, вы можете тестировать функциональность на основе времени быстро и на лету.

A очень простой пример, это будет зависеть от вашего планировщика:

public interface IDateTimeProvider
{
    DateTime CurrentDateTime { get; }
}

public class DateTimeProvider : IDateTimeProvider
{
    public DateTime CurrentDateTime
    {
        get { return DateTime.Now; }
    }
}

public class TestDateTimeProvider : IDateTimeProvider
{
    public DateTime CurrentDateTime { get; set; }
}

public class Scheduler
{
    private readonly IDateTimeProvider DateTimeProvider;

    public Scheduler(IDateTimeProvider provider)
    {
        DateTimeProvider = provider;
    }
}
0 голосов
/ 02 ноября 2011

Вы можете использовать такие инструменты, как Moles, чтобы иметь дело с DateTime.Now http://angler.wordpress.com/2010/01/21/pex-and-moles-untestable-code-not-really/

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