Action使用

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

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

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

/// <summary>
/// 执行其他环境
/// </summary>
public PluginTest() : base(EnvironmentType.DEV) { } [TestMethod]
[Description("模拟测试Action")]
public void PluginTemplateTest1()
{
var paramBag = new Dictionary<string, object>();
paramBag.Add("inputPara1", "1000001");
paramBag.Add("inputPara2", "parameter"); var serviceProvider = ConstructServiceProvider(paramBag); //引用插件DLL,执行单元测试
//PluginTemplate test = new PluginTemplate("", "");
//test.Execute(serviceProvider); Assert.AreEqual(this.output["state"].ToString(), "success", "执行失败");
}

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

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

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

Plugin使用

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

镜像传递与入参相同

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

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

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

[TestMethod]
[Description("模拟测试Plugin")]
public void PluginTemplateTest2()
{
/* 当前模拟更新后操作,界面执行提交操作new_status改成30,
* 插件已注册前后镜像 */
var paramBag = new Dictionary<string, object>();
var id = Guid.Parse("当前单据ID"); //模拟前镜像 后镜像
var preImage = serviceProxy.Retrieve("account", id, new ColumnSet(true));
var postImage = serviceProxy.Retrieve("account", id, new ColumnSet(true));
postImage["new_status"] = new OptionSetValue(30); //模拟Target操作
var target = new Entity("account", id);
target["new_status"] = new OptionSetValue(30);
paramBag.Add("Target", target); //模拟插件操作
base.RegisterSteps(MsgType.Update, 40);
base.RegisterPreImage(preImage);
base.RegisterPostImage(postImage); //模拟当前操作人context.userid.
//不使用此方法默认当前代理用户权限.
base.RegisterUserId("操作人Guid"); var serviceProvider = ConstructServiceProvider(paramBag); //引用插件DLL,执行单元测试
//PluginTemplate test = new PluginTemplate("", "");
//test.Execute(serviceProvider);
}

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

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

  

Console使用

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

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

[TestMethod]
public void TaskTemplateTest()
{
//"TaskTemplate":任务名称, "para01":参数值,"para02":参数值
string[] args = new string[] { "TaskTemplate", "para01", "para02" };
TaskContext taskContext = new TaskContext();
string taskCode = args[0];
try
{
List<string> cmdarg = new List<string>();
if (args.Length > 1)
{
cmdarg.AddRange(args.Skip<string>(1));
}
ConfigFactory config = new ConfigFactory(ConfigurationManager.AppSettings["xrmConfig"].ToString());
taskContext.Args = args;
taskContext.CrmService = new CrmServiceClient(config.GetCRMConnectionString());
taskContext.DbConnection = new SqlConnection(config.GetDBConnectionString());
//taskContext.Logger = new FileLogger(config.GetNLogPath());//配置文件Log
//执行任务
//taskContext.Logger.ConsoleInfo($"{taskCode}程序启动时间:{DateTime.Now.ToString() }"); //引用控制台DLL,执行单元测试
//ITask taskName = TaskFactory.CreatTaks(taskCode);
//taskName.Execute(taskContext); // taskContext.Logger.ConsoleInfo($"{taskCode}程序结束时间:{DateTime.Now.ToString() }");
}
catch (FaultException<OrganizationServiceFault> ex)
{
// taskContext.Logger.ConsoleError($"{taskCode}程序运行失败:Message:{ex.Message}", ex);
throw;
}
}

  

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. CF1327F题解

    首先第一步,位运算拆位.变为一个区间的 \(And\) 为 \(0\) 或 \(1\). 如果 \(And\) 为 \(1\),那么所有数都需要为 \(1\),否则为 \(0\). 我们把所有可能为 ...

  2. 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  3. SQL学习日记

    目录 SQL学习日记 1. 常见的数据库对象 2. DDL 定义语句 3. DML 操作语句 4. DQL 查询语句 5. DCL 控制语句 SQL学习日记 1. 常见的数据库对象 对象名 关键字 描 ...

  4. selenium&火狐驱动安装及兼容性处理

    1.selenium安装 安装:pip install selenium==3.7.0 卸载: pip uninstall selenium 查看版本号:pip show selenium   2.火 ...

  5. Django基础必会

    Django基础必会 Django项目目录 mysite -mysite -__init__.py -urls.py(函数和函数的对应关系) -settings.py(Django项目的配置信息) - ...

  6. FPGA设计流程

    今天学习了FPGA设计流程的视频,我理解要做一个完整的FPGA系统,所要经历的步骤,先将它简单总结如下: 我在对上面的流程图进行解释: 第一:设计定义就是我们这个FPGA系统或者FPGA设计所要实现的 ...

  7. Java基础(补充)

    为什么 Java 中只有值传递? 开始之前,我们先来搞懂下面这两个概念: 形参&实参 值传递&引用传递 形参&实参 方法的定义可能会用到 参数(有参的方法),参数在程序语言中分 ...

  8. SpringBoot+Vue+mysql 搭建(二)node 和gulp环境的设置

    安装node不再写    gulp 参考以下文档 https://blog.csdn.net/a599174211/article/details/82878095 1.使用npm命令安装,一下两个命 ...

  9. Ajax的乱码解决问题?

    Javascript是使用UTF-8国际编码,即每个汉字用4个字节来存储,这就造成了用AJAX来send数据的时候出现会乱码. Ajax乱码产生主要有2个原因 1. XMLHttpRequest返回的 ...

  10. Oracle数据库 如何根据某个字段名的值去查询存在的表列表

    declare v_sql varchar2(1000); data_count number; begin -- OWNER是模式名 tablespace_name是表空间 for cur_tabl ...