嘲弄IOrganizationService的问题.执行在CRM 2011插件

本文关键字:CRM 2011 插件 执行 IOrganizationService 问题 嘲弄 | 更新日期: 2023-09-27 18:04:15

我仍然是新的嘲弄,我有这个代码的麻烦:

//create the request
SendEmailFromTemplateRequest emailUsingTemplateReq = 
   new SendEmailFromTemplateRequest
   {
       Target = email,
       TemplateId = new Guid("07B94C1D-C85F-492F-B120-F0A743C540E6"),
       RegardingId = toParty[0].PartyId.Id,
       RegardingType = toParty[0].PartyId.LogicalName
   };
//retrieve response
SendEmailFromTemplateResponse emailUsingTemplateResponse =
    (SendEmailFromTemplateResponse)service.Execute(emailUsingTemplateReq);
var emailId = emailUsingTemplateResponse.Id;

到目前为止,我还没有遇到模拟IOrganizationService的问题,但是我在execute方法上犯了一些错误。根据sdk, Execute方法返回一个OrganizationResponse对象,需要将其转换为正确的响应类。以下是我到目前为止所做的尝试:

var idResults = new ParameterCollection();
idResults.Add("Id", Guid.NewGuid());
mockOrganizationService
  .Setup(os => os.Execute(It.IsAny<SendEmailFromTemplateRequest>()))
  .Returns(new OrganizationResponse
  {
      Results = idResults,
      ResponseName = "SendEmailFromTemplate",
  });

当我尝试运行测试时,我一直得到一个无效的强制转换异常。我想我一定是把响应对象设置错了。有人能给我解释一下模拟IOrganizationService的正确方法吗?执行方法?

嘲弄IOrganizationService的问题.执行在CRM 2011插件

您的方法是正确的,但是您使用了错误的响应类型。服务将结果作为OrganizationResponse返回(这是所有响应的基类)。您尝试将基类型强制转换为特定类型。这行不通。

你只需要返回一个SendEmailFromTemplateResponse的实例来让你的代码工作。

var orgService = new Mock<IOrganizationService>();
var idResults = new ParameterCollection
{
   {"Id", Guid.NewGuid()}
};
orgService.Setup(s => s.Execute(It.IsAny<SendEmailFromTemplateRequest>()))
                       .Returns(new SendEmailFromTemplateResponse
{
   Results = idResults,
   ResponseName = "SendEmailFromTemplate"
});