Создание связанных данных с помощью 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 также сам тестируется модулем, вы найдете множество различных примеров запросов здесь

Два варианта:

  1. Ваш WorkOrderService содержит ошибку, и ваш модульный тест работает безупречно.

  2. В фреймворке FakeXrmEasy есть ошибка. Я бы изменил ваш тест только для того, чтобы получить abc_OrderTask и убедиться, что он имеет RegardingObjectId. Если это так, но объединение не работает, отправьте свои результаты на страницу GitHub как ошибку.

Другие вопросы по тегам