• Dynamic CRM插件调试与单元测试


    背景

    使用Dynamic CRM平台开发完业务插件后,不可避免的就是进行插件调试,测试插件是否正常运行,网上关于Dynamic CRM的资料比较少,但对于调试的博客还是挺多的,足可见插件调试对于Dynamic CRM平台开发的重要性,网上的调试方法大差不差,根据网上的例子在项目中实践调试后,也想将适合我的调试方法记录下来。

    调试方法

    (直接附加程序的方式 不友好且比较简单不特别介绍)

    一、使用插件工具中的分析器Profiler
    1.打开插件工具PluginRegistration 点击安装Install Profiler

    2.选中要调试的插件Step,点击Start Profiling

    保持默认,直接点击OK

    3.去Dynamic CRM平台里 操作注册插件的实体,点击保存的时候,会弹出来业务流程错误的提示,点击下载日志文件(并不是真的有错误 下载的文件用来后面复现操作调试用)

     4.去插件工具中关掉Profiing,点击Stop Profiling

     5.点击Debug,重演操作

     6.打开VS,找到插件的代码,设置断点,附加PluginRegistration进程

     

     7.回到插件工具点击Start Execution

     

     VS中会命中断点,进行VS调试即可。

     

     二、基于RhinoMocks的单元测试

    单元测试调试插件也是一种常规的方法,个人更喜欢这种方式,虽然可能在模拟实体数据的时候会比较费劲。
    1.VS中添加单元测试项目

     

     2.Nuget包中添加RhinoMocks、Microsoft.CrmSdk.CoreAssemblies

     

     

     3.编写测试,除了获取和设置实体处不同外,其他的都是通用的代码

     1 ClientCredentials clientCredentials = new ClientCredentials();
     2             clientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("MSCRM用户名", "密码", "");
     3             IServiceProvider serviceProvider = MockRepository.GenerateMock<IServiceProvider>();
     4             IPluginExecutionContext context = MockRepository.GenerateMock<IPluginExecutionContext>();
     5             IOrganizationServiceFactory factory = MockRepository.GenerateMock<IOrganizationServiceFactory>();
     6             IOrganizationService service = MockRepository.GenerateMock<IOrganizationService>();
     7 service = new OrganizationServiceProxy(
     8                 new Uri("http://127.0.0.1:80/Devbrock/XRMServices/2011/Organization.svc"), null, clientCredentials,
     9                 null); //Url为项目地址
    10 ParameterCollection paramBag = new ParameterCollection();
    11             //从数据库中检索crm_marketingperson实体中一条id为  的数据
    12             Entity currentent = service.Retrieve("crm_marketingperson", new Guid("59F07FCA-CF5C-E911-80D9-E2DBE4BB07CF"),
    13                 new Microsoft.Xrm.Sdk.Query.ColumnSet(true));
    14             //也可以直接创建 一个测试用的实体
    15             paramBag.Add("Target", currentent);
    16             context.Stub(x => x.InputParameters).Return(paramBag);
    17             serviceProvider.Stub(x => x.GetService(typeof(IPluginExecutionContext))).Return(context);
    18             serviceProvider.Stub(x => x.GetService(typeof(IOrganizationServiceFactory))).Return(factory);
    19             factory.Stub(x => x.CreateOrganizationService(null)).Return(service);
    20 
    21 //最后调用插件,将封装好的serviceProvider传进去
    22 TestPlugin testPlugin = new TestPlugin();
    23  testPlugin.Execute(serviceProvider);
    View Code

    总结:
    调试的目的是为了检测问题,不论哪种方法,定位到问题,然后解决问题就可以了。

    参考网址:

    https://www.cnblogs.com/cuig/p/9077461.html

    https://blog.csdn.net/vic0228/article/details/70948816

  • 相关阅读:
    centos 7 配置ip
    Linux下安装jmeter
    eclipse 高效快捷键大全
    eclipse中不能找到dubbo.xsd报错”cvc-complex-type.2.4.c“的 两种解决方法
    大型网站系统架构演化之路(转)
    程序员技术练级攻略
    JSP和servlet之间的传值(总结的很全面)
    正则表达式笔记
    cenos 安装nginx并添加到service
    mac os重装php
  • 原文地址:https://www.cnblogs.com/adingfirstlove/p/10708731.html
Copyright © 2020-2023  润新知