2011-08-01 121 views
3

我还是新的嘲弄,我有这个代码的麻烦:问题与CRM嘲讽IOrganizationService.Execute 2011插件

//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,但我我在执行方法上做了错误的事情。根据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.Execute方法的正确方法吗?

回答

6

你的方法是正确的,但你使用错误的响应类型。该服务返回结果为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" 
}); 
+0

Doh!谢谢,我知道这是我忽视的简单事情。 –

+0

@bweaver相信我:我知道这些时刻;) – ccellar