单元测试Codeactivity工作流程

时间:2016-06-14 03:06:25

标签: c# dynamics-crm-2011 workflow

我正在尝试为CodeActivity Workflow编写单元测试。到目前为止我的测试只是

[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值

2 个答案:

答案 0 :(得分:1)

如果您要手动构建上下文,则需要填充PrimaryEntityName中的[TestMethod]。您可能应该进一步研究如何构建workflowContext测试对象。<​​/ p>

[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();
}

答案 1 :(得分:0)

您可能想尝试FakeXrmEasy。它是一个开源单元测试库,我正在维护它以便于动态Crm的单元测试,而不会嘲笑任何东西。

get a reference to a workflow context并注入您需要的任何参数,包括主要实体名称和ID。

但是最常见的crm消息已经被模拟(检索多个请求,CRUD,fetchxml,LINQ,QueryExpressions,所以没有...)