2015-06-12 6 views
0

Может ли кто-нибудь предоставить мне образец кода для модульного тестирования рабочего процесса с Rhino Framework. Более конкретно я не могу заглушить объект CodeActivityContext, который является параметром для метода workflow.execute. Я очень новичок в Rhino, и это тоже не помогает.Тестирование рабочего процесса Dynamics CRM с Rhino Framework

ответ

0

Я рекомендую другой подход к модульному тестированию, который отличается от большинства блогов и сообщений.

Я рекомендую получить IOrganizationService и любые данные или идентификаторы, необходимые для выполнения вашей функции. Затем я рекомендую поместить функцию, которая выполняет тяжелую работу (логика, операции CRUD и т. Д.) В отдельном классе. Таким образом, вам нужно только создать макет службы IOrganizationService. Вот пример:

public class AccountContactManager 
{ 
    private IOrganizationService _service; 
    public AccountContactManager(IOrganizationService service) 
    { 
     _service = service; 
    } 

    public void UpdateAccountContacts(Guid accountId) 
    { 
     this._service.Execute();//do something here with the service 
    } 
} 

А вот пример того, как получить то, что вам нужно из CodeActivityContext:

var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
var tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); 
var recordId = context.PrimaryEntityId; 
var preImage = context.PreEntityImages["PreImage"]; 
var postImage = context.PostEntityImages["PostImage"]; 
var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
var organizationService = result.Factory.CreateOrganizationService(context.UserId); 
var tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); 
var userId = context.UserId; 
var record = context.InputParameters["Target"]; 
if (record is Entity) 
{ 
    var entityRecord = (Entity)record; 
} 
else 
{ 
    var recordReference = (EntityReference)record; 
}