Создание связанных данных с помощью fakexrmeasy
Как создать сущность и связать с ней другую сущность в FakeXrmEasy?
Я пытаюсь проверить этот код:
public List<abc_OrderTask> GetTasks(Guid workOrderGuid)
{
var result = (from task in _xrmServiceContext.abc_OrderTaskSet
join workOrder in _xrmServiceContext.abc_workorderSet
on task.RegardingObjectId.Id equals workOrder.Id
where workOrder.Id == workOrderGuid
select task).ToList();
return result;
}
Отношение между abc_OrderTask и abc_WorkOrder равно N:1
В моем тесте я пытаюсь связать две сущности:
[Test]
public void GetTasks_WorkOrderWithExistingTasks_ReturnsListOfTasks()
{
using (var xrmServiceContext = new XrmServiceContext(_fakeOrganizationService))
{
var workOrderGuid = Guid.NewGuid();
var taskGuid = Guid.NewGuid();
var workOrder = new abc_workorder { Id = workOrderGuid };
var task = new abc_OrderTask
{
Id = taskGuid,
Subject = "Required subject",
RegardingObjectId =
new EntityReference(abc_workorder.EntityLogicalName, workOrderGuid)
};
_fakeContext.Initialize(new List<Entity> { workOrder, task });
var sut = new WorkOrderService(xrmServiceContext);
// Act
// Assert
Assert.That(sut.GetTasks(workOrderGuid), Is.InstanceOf<List<abc_OrderTask>>());
Assert.That(sut.GetTasks(workOrderGuid).Count.Equals(1));
}
}
Тем не менее, набор результатов пуст.
Как создать сущность и связать с ней другую сущность в FakeXrmEasy?
Вот как этот объект обновляется:
private IOrganizationService _fakeOrganizationService;
[SetUp]
public void Init()
{
_fakeContext = new XrmFakedContext { ProxyTypesAssembly = Assembly.GetAssembly(typeof(abc_workorder)) };
_fakeOrganizationService = _fakeContext.GetFakedOrganizationService();
}
3 ответа
abc_OrderTask
это обычай деятельности. Действия являются дочерними записями их относительно объекта (abc_workorder
), определяется abc_OrderTask.RegardObjectId
, Похоже, это правильно настроено в ваших тестовых данных.
Проверяемый метод, GetTasks, запрашивает на основе пользовательского отношения N:1 из abc_workorder
в abc_OrderTask
с именем поля поиска abc_workorder_abc_OrderTasks
,
Вам нужно исправить GetTasks
фильтровать abc_OrderTask
от RegardingObjectId.Id
,
Спасибо вам всем за все ответы:)
На этот вопрос будет гораздо быстрее и проще ответить, подняв проблему с модульным тестом на странице GitHub, чтобы мы могли создать и запустить модульный тест и посмотреть, что происходит.
В любом случае, я бы сказал, что Nicknow - это правильный ответ, поскольку вы пытаетесь фильтровать записи в выражении LINQ, используя свойство 1->N, а не то, что я делал раньше, а как раз наоборот, фильтрацию по ассоциированному EntityReference (RegardingObjectId.Id) как Ник предлагал.
По сути, вы можете фильтровать запросы 1:N, используя связанный поиск, например, contact.ParentCustomerId.Id и т. Д. И записи N:N, используя объект пересечения, а также связанные с ними поиски. Это должно работать для LINQ, QueryExpressions и FetchXml.
Надеюсь это поможет!
[EDIT]: поскольку FakeXrmEasy также сам тестируется модулем, вы найдете множество различных примеров запросов здесь
Два варианта:
Ваш WorkOrderService содержит ошибку, и ваш модульный тест работает безупречно.
В фреймворке FakeXrmEasy есть ошибка. Я бы изменил ваш тест только для того, чтобы получить abc_OrderTask и убедиться, что он имеет RegardingObjectId. Если это так, но объединение не работает, отправьте свои результаты на страницу GitHub как ошибку.