Я использую XrmFakeEasy Framework для модульного тестирования моих плагинов.
Ниже приведен метод модульного тестирования:
public void FirstTest()
{
var id = Guid.NewGuid();
var entity1 = new new_entity1
{
new_name = "Test 1",
new_entityId = id,
};
EntityReference entity = new EntityReference();
entity.Id = id;
entity.LogicalName = "new_entity1";
entity.Name = entity1.new_name;
var clasification = new new_clasification
{
Id = Guid.NewGuid(),
new_name = "My First Classification",
new_Type = false,
new_Offender = entity
};
var fakedContext = new XrmFakedContext();
fakedContext.ProxyTypesAssembly = Assembly.GetAssembly(typeof(idoc_inmateclasification));
fakedContext.Initialize(new List<Entity>
{
classification, new_entity1
});
ParameterCollection inputParameters = new ParameterCollection();
inputParameters.Add("Target", classification);
var pluginContext = fakedContext.GetDefaultPluginContext();
pluginContext.MessageName = "Create";
pluginContext.InputParameters = inputParameters;
pluginContext.Depth = 1;
IOrganizationService service = fakedContext.GetOrganizationService();
var fakedPlugin = fakedContext.ExecutePluginWithTarget<ClassificationPlugin>(classification);
Я написал следующий код для извлечения данных Offender из плагина:
public new_entity entity1 => _entity1?? (_entity1= new Cache<new_entity>(() =>
{
var queryExp = new QueryExpression("new_entity")
{
ColumnSet = new ColumnSet("new_sex", "new_age", "new_dateofbirth")
};
var result = OrganizationService.RetrieveMultiple(queryExp);
if (result == null || result.Entities.Count == 0)
return null;
var record = result[0];
var returnValue = new new_entity
{ idoc_Sex = record.ValueSafe<OptionSetValue>("new_sex"),
idoc_Age = record.ValueSafe<int>("new_age"),
};
return result;
}));
В учебном руководстве по XrmFakesEasy я прочитал, что все данные запрашиваются из данных, переданных в методе Initialize.
Но, когда я пытаюсь вызвать приведенный ниже метод,
evaluateScores.EvaluateScoresInForm(entity1)
Я получаю следующую ошибку:
Unable to cast object of type 'Castle.Proxies.ObjectProxy_4' to type 'Microsoft.Xrm.Sdk.IProxyTypesAssemblyProvider'.
Что я делаю не так?
Нужно ли создавать фиктивный метод для извлечения данных, когда мыделать в случае использования заглушек?