Проблема с насмешливым IOrganizationService.Execute в плагине CRM 2011 - PullRequest
3 голосов
/ 01 августа 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, но я что-то не так делаю с методом 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.Execute?

1 Ответ

6 голосов
/ 01 августа 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"
});
...