2012-01-25 2 views
0

Я хочу предоставить собственную реализацию TimerExtention вместо DurableTimerExtention, предоставляемой активностью Delay, чтобы я мог тестировать рабочие процессы, использующие задержки.Тест WF 4.0 Задержка активности - Замените DurableTimerExtension моим собственным MockTimerExtension

Как это сделать?

У меня есть экземпляр WorkflowService и его корневая активность. Служба рабочего процесса размещается в WorkflowServiceHost (хотя я не могу понять, как получить экземпляр WorkflowInstance)

ответ

1

Одним из способов тестирования ваших рабочих процессов является использование Microsoft.Activities.UnitTesting по адресу CodePlex. Он имеет возможность издеваться над действиями с использованием XAML Injection. См. here для более подробной информации.

В случае активности с задержкой вы можете сделать что-то намного проще. Вместо жесткого кодирования Duration на фиксированное значение я обычно создаю объект конфигурации с продолжительностью там. В активности Delay я просто вводим выражение, подобное Settings.WaitForPaymentDuration. В производстве Settings.WaitForPaymentDuration будет установлено примерно 30 дней, но в тесте я могу установить его на 1 секунду вместо того, чтобы вообще не менять рабочий процесс.

+0

Я хочу, чтобы иметь возможность не только заменить в течение 30 дней с 1 секунды, но для управления временем. То есть Я хочу, чтобы действия задержки работали с заданным «ISystemClock {DateTime Now {get; } }' пример. Проблема с использованием XamlInjector заключается в том, что я должен переопределить всю активность Delay с той единственной разницей, которую предоставляет TimerExtension (вот что я в итоге сделал). В идеале я хочу, чтобы _just_ заменил DurableTimerExtension макетным, без необходимости связываться с активностью Delay. –

0

У меня был такой же интерес в mocking the TimerExtension, я написал сообщение в блоге об этом. В этой статье я вводил свою собственную реализацию TimerExtension с использованием WorkflowApplication.Extensions.Add<T>(Func<T>). WorkflowServiceHost тоже есть этот комплект. Вы можете заменить конкретный класс, который у меня есть в моем примере, с макетом. Я написал его с таргетингом на 4.5, но он должен работать со всем, что использует коллекцию расширений. Его в 4, не уверен более ранних версиях.

[Link]

Смежные вопросы