1

Как вы создаете сущность и связываете с ней другое сущность в 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(); 
    } 
+0

Где '_fakeContext' приходит? Как это связано с '_fakeOrganizationService'? Я бы добавил код, в который вы их установили. У меня есть несколько примеров на https://github.com/nicknow/BloggingCrm-Dynamics-Crm-Plugin-Unit-Testing-Example/blob/master/BloggingCrm.Account.BusinessLogic.Tests/Prove_that_AccountQueries_Is_Working.cs того, как я использовал FakeXrmEasy для выполните этот тип тестирования. – Nicknow

+0

спасибо @Nicknow я добавил, что на вопрос –

+0

спасибо, но я не смог найти полезный пример в вашем github –

ответ

3

abc_OrderTask - обычное явление. Деятельность представляет собой учет детей по их объекту (abc_workorder), определяемый по abc_OrderTask.RegardObjectId. Кажется, это правильно настроено в ваших тестовых данных.

Проверяемый метод, GetTasks, запрашивает на основе пользовательского отношения N: 1 от abc_workorder до abc_OrderTask с полем поиска с именем abc_workorder_abc_OrderTasks.

Вам необходимо исправить GetTasks для фильтрации abc_OrderTask по RegardingObjectId.Id.

+0

Большое вам спасибо, я обновил вопрос с вашим предложением и все еще получаю пустой набор результатов –

-1

два варианта:

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

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

2

Спасибо вам всем за ответы на все вопросы :)

Это собирается быть намного быстрее & легче ответить на raising an issue with a unit test on the GitHub page так, что мы могли бы построить и запустить модульный тест и посмотреть, что происходит.

В любом случае, я бы сказал, что правильный ответ Nicknow - это то, что вы пытаетесь фильтровать записи в выражении LINQ, используя свойство 1-> N, а не то, что я делал, что является абсолютно противоположным, ассоциированный EntityReference (RegardingObjectId.Id), такой как Ник.

В принципе, вы можете отфильтровать запросы 1: N, используя связанный поиск, например contact.ParentCustomerId.Id и т. Д. И записи N: N с использованием объекта пересечения, а также связанные с ним поисковые запросы. Это должно работать для LINQ, QueryExpressions и FetchXml.

Надеюсь, это поможет!

[EDIT]: Как FakeXrmEasy также само устройство испытано, вы find loads of different query examples here