Action使用

使用paramBag传递入参,填写入参名,入参值,后使用 serviceProvider传入插件。

Assert.AreEqual(this.output["state"].ToString(), "success", "执行失败");

断言AreEqual("条件","结果","成功","失败");

  1. /// <summary>
  2. /// 执行其他环境
  3. /// </summary>
  4. public PluginTest() : base(EnvironmentType.DEV) { }
  5.  
  6. [TestMethod]
  7. [Description("模拟测试Action")]
  8. public void PluginTemplateTest1()
  9. {
  10. var paramBag = new Dictionary<string, object>();
  11. paramBag.Add("inputPara1", "1000001");
  12. paramBag.Add("inputPara2", "parameter");
  13.  
  14. var serviceProvider = ConstructServiceProvider(paramBag);
  15.  
  16. //引用插件DLL,执行单元测试
  17. //PluginTemplate test = new PluginTemplate("", "");
  18. //test.Execute(serviceProvider);
  19.  
  20. Assert.AreEqual(this.output["state"].ToString(), "success", "执行失败");
  21. }

  使用单元测试需要在“C:\CRMConfig”目录下增加“Vyung.Xrm.config”文件并配置

  1. <crmConfig>
  2. <add key="CRMDEVConnectionString" value="Url=url.com; Domain=域名; Username=账户名; Password=密码; AuthType=连接方式" />
  3. </crmConfig>

  key默认为“CRMConnectionString”,需要在增加DEV,

Plugin使用

对比Action,Plugin中增加了前后镜像的传递和操作的模拟,以及模拟当前操作人

镜像传递与入参相同

操作使用base执行插件中的操作,及镜像前后的参数

RegisterUserId填写操作人id模拟使用者

使用try catch捕获操作问题,执行判断

  1. [TestMethod]
  2. [Description("模拟测试Plugin")]
  3. public void PluginTemplateTest2()
  4. {
  5. /* 当前模拟更新后操作,界面执行提交操作new_status改成30,
  6. * 插件已注册前后镜像 */
  7. var paramBag = new Dictionary<string, object>();
  8. var id = Guid.Parse("当前单据ID");
  9.  
  10. //模拟前镜像 后镜像
  11. var preImage = serviceProxy.Retrieve("account", id, new ColumnSet(true));
  12. var postImage = serviceProxy.Retrieve("account", id, new ColumnSet(true));
  13. postImage["new_status"] = new OptionSetValue(30);
  14.  
  15. //模拟Target操作
  16. var target = new Entity("account", id);
  17. target["new_status"] = new OptionSetValue(30);
  18. paramBag.Add("Target", target);
  19.  
  20. //模拟插件操作
  21. base.RegisterSteps(MsgType.Update, 40);
  22. base.RegisterPreImage(preImage);
  23. base.RegisterPostImage(postImage);
  24.  
  25. //模拟当前操作人context.userid.
  26. //不使用此方法默认当前代理用户权限.
  27. base.RegisterUserId("操作人Guid");
  28.  
  29. var serviceProvider = ConstructServiceProvider(paramBag);
  30.  
  31. //引用插件DLL,执行单元测试
  32. //PluginTemplate test = new PluginTemplate("", "");
  33. //test.Execute(serviceProvider);
  34. }

Plugin和Action在使用前,要使用用单元测试将预想场景模拟成功,捕获预想错误,才能注册

Console一样,执行成功后再部署

  

Console使用

与控制台中的Program类似,选择执行的程序后运行

添加执行日志,使用try catch捕获问题

  1. [TestMethod]
  2. public void TaskTemplateTest()
  3. {
  4. //"TaskTemplate":任务名称, "para01":参数值,"para02":参数值
  5. string[] args = new string[] { "TaskTemplate", "para01", "para02" };
  6. TaskContext taskContext = new TaskContext();
  7. string taskCode = args[0];
  8. try
  9. {
  10. List<string> cmdarg = new List<string>();
  11. if (args.Length > 1)
  12. {
  13. cmdarg.AddRange(args.Skip<string>(1));
  14. }
  15. ConfigFactory config = new ConfigFactory(ConfigurationManager.AppSettings["xrmConfig"].ToString());
  16. taskContext.Args = args;
  17. taskContext.CrmService = new CrmServiceClient(config.GetCRMConnectionString());
  18. taskContext.DbConnection = new SqlConnection(config.GetDBConnectionString());
  19. //taskContext.Logger = new FileLogger(config.GetNLogPath());//配置文件Log
  20. //执行任务
  21. //taskContext.Logger.ConsoleInfo($"{taskCode}程序启动时间:{DateTime.Now.ToString() }");
  22.  
  23. //引用控制台DLL,执行单元测试
  24. //ITask taskName = TaskFactory.CreatTaks(taskCode);
  25. //taskName.Execute(taskContext);
  26.  
  27. // taskContext.Logger.ConsoleInfo($"{taskCode}程序结束时间:{DateTime.Now.ToString() }");
  28. }
  29. catch (FaultException<OrganizationServiceFault> ex)
  30. {
  31. // taskContext.Logger.ConsoleError($"{taskCode}程序运行失败:Message:{ex.Message}", ex);
  32. throw;
  33. }
  34. }

  

crm单元测试使用的更多相关文章

  1. Dynamic CRM插件调试与单元测试

    背景 使用Dynamic CRM平台开发完业务插件后,不可避免的就是进行插件调试,测试插件是否正常运行,网上关于Dynamic CRM的资料比较少,但对于调试的博客还是挺多的,足可见插件调试对于Dyn ...

  2. OpenAuth.Net.landv分支之旅开始制作CRM系统

    OpenAuth.Net.landv分支之旅开始制作CRM系统 这个事件的由来是因为没有一个统一的会员卡平台系统,目前需要连接三家酒店会员系统,由于三家酒店使用了三种酒店管理系统,彼此之间的耦合低.三 ...

  3. SpringBoot 构建RestFul API 含单元测试

    相关博文: 从消费者角度评估RestFul的意义 SpringBoot 构建RestFul API 含单元测试 首先,回顾并详细说明一下在快速入门中使用的  @Controller .  @RestC ...

  4. 利用windows server 2012 R2的Hyper-V搭建多个虚拟机的 Dynamics CRM 环境知识点小结

    一.需要掌握网络的知识,域真正的意义,防火墙等其他知识,这些知识我还需要加强,下面是我和同事的结果,不对的地方大家可以指出来,谢谢. 1.安装好的CRM2011环境,必须先打Update Rollup ...

  5. Intellij idea添加单元测试工具

    1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...

  6. Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...

  7. Python的单元测试(二)

    title: Python的单元测试(二) date: 2015-03-04 19:08:20 categories: Python tags: [Python,单元测试] --- 在Python的单 ...

  8. Python的单元测试(一)

    title: Python的单元测试(一) author: 青南 date: 2015-02-27 22:50:47 categories: Python tags: [Python,单元测试] -- ...

  9. javascript单元测试框架mochajs详解

    关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...

随机推荐

  1. 编译OneAPI(支持Nvidia显卡)

    开始使用DPC++ 官方安装教程 预备条件 请确保当前开发环境满足如下条件: git cmake版本需要满足3.14及以上. python版本3.6以上的python. nijia版本1.8及以上(使 ...

  2. LGP5142题解

    题意简明,不说了( 因为教练让同学们做线段树的题,早就会了线段树的我就来爆踩水水蓝了/kk 首先推一下柿子: \[\frac 1 n\sum_{i=1}^n(a_i^2-2 \times a_i \t ...

  3. windows 2008 R2磁盘清理

    记录一次由于磁盘空间满,IIS使前端程序报500的事故 由于导出Api部署在IIS服务器,在程序调用导出Api会报500 发现windows服务器C盘已满 下面处理过程 只需复制cleanmgr.ex ...

  4. web自动化之定位

    UI自动化必不可少的操作--元素定位 8大基础定位 driver.find_element_by_id() # id定位 driver.find_element_by_name() # name定位 ...

  5. HTTPS-各种加密方式

    推荐阅读:https://www.cnblogs.com/zwtblog/tag/计算机网络/ 目录 HTTPS 对称加密(AES) 非对称加密(RSA) 工作过程 分析 优缺点 常用算法 混合加密 ...

  6. TreeMap与TreeSet的源码分析

    1.TreeMap源码 1.属性部分: private final Comparator<? super K> comparator;//比较器 private transient Ent ...

  7. 为什么要使用 rabbitmq?

    (1)在分布式系统下具备异步,削峰,负载均衡等一系列高级功能; (2)拥有持久化的机制,进程消息,队列中的信息也可以保存下来. (3)实现消费者和生产者之间的解耦. (4)对于高并发场景下,利用消息队 ...

  8. Oracle入门基础(七)一一集合运算

    SQL> /* SQL> 查询10和20号部门的员工 SQL> 1. select * from emp where deptno=10 or deptno=20; SQL> ...

  9. ConcurrentHashMap 的并发度是什么 ?

    ConcurrentHashMap 的并发度就是 segment 的大小,默认为 16,这意味着最多同时可以有 16 条线程操作 ConcurrentHashMap,这也是ConcurrentHash ...

  10. 在虚拟机里面安装mysql

    https://dev.mysql.com/downloads/repo/yum/ 首先到网站里面下载 mysql80-community-release-el7-3.noarch.rpm 通过xft ...