单元测试代码活动工作流程
Unit Testing Codeactivity Workflow
我正在尝试为 CodeActivity 工作流编写单元测试。到目前为止我的测试只有
[TestMethod]
public void BusinessUnitTest()
{
WorkflowInvoker invoker = new WorkflowInvoker(new DespatchStockOrder());
invoker.Extensions.Add<ITracingService>(() => tracingService);
invoker.Extensions.Add<IWorkflowContext>(() => workflowContext);
invoker.Extensions.Add<IOrganizationServiceFactory>(() => factory);
IDictionary<string, object> outputs = invoker.Invoke();
}
这工作正常并运行工作流程。但是,当我在工作流程中点击这一行时,我得到了一个空引用。
// Create the context
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
if (context == null)
{
throw new InvalidPluginExecutionException("Failed to retrieve workflow context.");
}
Entity entity = new Entity(context.PrimaryEntityName) //This line errors with PrimaryEntityName null
{
Id = context.PrimaryEntityId,
LogicalName = context.PrimaryEntityName
};
我的问题是如何在单元测试中获得 context.PrimaryEntityName 值
如果您手动构建上下文,则需要在 [TestMethod]
中填充 PrimaryEntityName
。您可能应该进一步研究 workflowContext
测试对象的构造方式。
[TestMethod]
public void BusinessUnitTest()
{
workflowContext.PrimaryEntityName = "Entity name";
WorkflowInvoker invoker = new WorkflowInvoker(new DespatchStockOrder());
invoker.Extensions.Add<ITracingService>(() => tracingService);
invoker.Extensions.Add<IWorkflowContext>(() => workflowContext);
invoker.Extensions.Add<IOrganizationServiceFactory>(() => factory);
IDictionary<string, object> outputs = invoker.Invoke();
}
您可能想试试 FakeXrmEasy。这是一个开源单元测试库,我正在维护以促进 Dynamics Crm 的单元测试,而无需模拟任何东西。
您 get a reference to a workflow context 并注入您需要的任何参数,包括主要实体名称和 ID。
但是最常见的 crm 消息已经被模拟(检索多个请求、CRUD、fetchxml、LINQ、QueryExpressions 等等……)
我正在尝试为 CodeActivity 工作流编写单元测试。到目前为止我的测试只有
[TestMethod]
public void BusinessUnitTest()
{
WorkflowInvoker invoker = new WorkflowInvoker(new DespatchStockOrder());
invoker.Extensions.Add<ITracingService>(() => tracingService);
invoker.Extensions.Add<IWorkflowContext>(() => workflowContext);
invoker.Extensions.Add<IOrganizationServiceFactory>(() => factory);
IDictionary<string, object> outputs = invoker.Invoke();
}
这工作正常并运行工作流程。但是,当我在工作流程中点击这一行时,我得到了一个空引用。
// Create the context
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
if (context == null)
{
throw new InvalidPluginExecutionException("Failed to retrieve workflow context.");
}
Entity entity = new Entity(context.PrimaryEntityName) //This line errors with PrimaryEntityName null
{
Id = context.PrimaryEntityId,
LogicalName = context.PrimaryEntityName
};
我的问题是如何在单元测试中获得 context.PrimaryEntityName 值
如果您手动构建上下文,则需要在 [TestMethod]
中填充 PrimaryEntityName
。您可能应该进一步研究 workflowContext
测试对象的构造方式。
[TestMethod]
public void BusinessUnitTest()
{
workflowContext.PrimaryEntityName = "Entity name";
WorkflowInvoker invoker = new WorkflowInvoker(new DespatchStockOrder());
invoker.Extensions.Add<ITracingService>(() => tracingService);
invoker.Extensions.Add<IWorkflowContext>(() => workflowContext);
invoker.Extensions.Add<IOrganizationServiceFactory>(() => factory);
IDictionary<string, object> outputs = invoker.Invoke();
}
您可能想试试 FakeXrmEasy。这是一个开源单元测试库,我正在维护以促进 Dynamics Crm 的单元测试,而无需模拟任何东西。
您 get a reference to a workflow context 并注入您需要的任何参数,包括主要实体名称和 ID。
但是最常见的 crm 消息已经被模拟(检索多个请求、CRUD、fetchxml、LINQ、QueryExpressions 等等……)