我正在尝试为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值
答案 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,所以没有...)