Я пытаюсь выполнить тестирование службы Workflow с помощью Microsoft.Activities.UnitTesting Целью является издеваться над расширениями службы, чтобы гарантировать выполнение всех шагов.Тестирование сервисов Workflow и Moq
Отмеченные объекты, похоже, не вызываются, хотя расширения зарегистрированы в хосте. Как и ожидалось, если расширения не зарегистрированы, генерируется исключение.
WorkflowServiceTestHost host = null;
try
{
Mock<ISubscriber> publisher = new Mock<ISubscriber>();
Mock<IWebWorker> webWorker = new Mock<IWebWorker>();
var voucher = new Voucher();
using (host = new WorkflowServiceTestHost(workflowServiceFile, serviceAddress))
{
host.WorkflowExtensions.Add<ISubscriber>(() => publisher.Object);
host.WorkflowExtensions.Add<IWebWorker>(() => webWorker.Object);
host.Open();
using (var factory = new ChannelFactory<IServiceInterface>(clientBinding, serviceAddress))
{
var proxy = factory.CreateChannel() as IServiceInterface;
proxy.Process(voucher);
}
}
**//These validations fail...**
publisher.Verify(m => m.Push(It.IsAny<Voucher>()), Times.Once(), "ISubscriber.Push was not called.");
webWorker.Verify(m => m.Done(It.IsAny<Voucher>()), Times.Once(), "IWebWorker.Done was not called.");
// The host must be closed before asserting tracking
// Explicitly call host.Close or exit the using block to do this.
}
finally
{
if (host != null)
{
host.Tracking.Trace(TrackingOptions.All);
}
}
Рабочий процесс выполняется, как ожидается, в IIS.
Спасибо!
Edit: Эта ошибка записывается в выходной Workflow Узла:
WorkflowInstance "Sequential Service" Unhandled Exception Source "Receive Process Message"
Exception <System.NotSupportedException: Expression Activity type 'CSharpReference`1' requires compilation in order to run.
Please ensure that the workflow has been compiled.
at System.Activities.Expressions.CompiledExpressionInvoker.InvokeExpression(ActivityContext activityContext)
at Microsoft.CSharp.Activities.CSharpReference`1.Execute(CodeActivityContext context)
at System.Activities.CodeActivity`1.InternalExecuteInResolutionContext(CodeActivityContext context)
at System.Activities.Runtime.ActivityExecutor.ExecuteInResolutionContext[T](ActivityInstance parentInstance, Activity`1 expressionActivity)
at System.Activities.OutArgument`1.TryPopulateValue(LocationEnvironment targetEnvironment, ActivityInstance targetActivityInstance, ActivityExecutor executor)
at System.Activities.RuntimeArgument.TryPopulateValue(LocationEnvironment targetEnvironment, ActivityInstance targetActivityInstance, ActivityExecutor executor, Object argumentValueOverride, Location resultLocation, Boolean skipFastPath)
at System.Activities.ActivityInstance.InternalTryPopulateArgumentValueOrScheduleExpression(RuntimeArgument argument, Int32 nextArgumentIndex, ActivityExecutor executor, IDictionary`2 argumentValueOverrides, Location resultLocation, Boolean isDynamicUpdate)
at System.Activities.ActivityInstance.ResolveArguments(ActivityExecutor executor, IDictionary`2 argumentValueOverrides, Location resultLocation, Int32 startIndex)
at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)>
Я еще не занимался выражениями C# в рабочих процессах. В любом случае, если я не ошибаюсь, вы должны скомпилировать рабочий процесс, прежде чем выполнить его; проверьте [здесь] (http://msdn.microsoft.com/en-us/library/jj591618.aspx). Он может выполняться в IIS, потому что хост (но это его, AppFabric?) Уже компилирует его неявно, но вы должны явно его использовать в своей «WorkflowServiceTestHost» – Joao
. На самом деле вы пытаетесь протестировать? Сам WorkflowServiceTestHost? –
Рабочий процесс состоит из простых операций приема и двух кодов; у него нет выражений, по крайней мере, я знаю. Я пытаюсь проверить Workflow, а не WorkflowServiceTestHost. Показанная трассировка является частью выходного документа WorkflowServiceTestHost, созданного «host.Tracking.Trace (TrackingOptions.All);». Спасибо вам всем! – JCS