1

Wie erstellen Sie eine Entität und verknüpfen Sie eine andere Entität damit in FakeXrmEasy?Erstellen von verknüpften Daten mit fexexrmeasy

ich diesen Code zu testen, bin versucht:

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; 
    } 

Beziehung zwischen abc_OrderTask und abc_WorkOrder ist N: 1

In meinem Test, ich bin versucht, die beiden Entitäten zu verknüpfen:

[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)); 
     } 
    } 

Die Ergebnismenge ist jedoch leer.

Wie erstellt man in FakeXrmEasy eine Entität und verknüpft eine andere Entität damit?

Hier ist, wie diese Aufgabe neu-ed up wird immer:

private IOrganizationService _fakeOrganizationService; 

    [SetUp] 
    public void Init() 
    { 
     _fakeContext = new XrmFakedContext { ProxyTypesAssembly = Assembly.GetAssembly(typeof(abc_workorder)) }; 
     _fakeOrganizationService = _fakeContext.GetFakedOrganizationService(); 
    } 
+0

Wo ist '_fakeContext' kommen? Wie ist es mit '_fakeOrganizationService' verbunden? Ich würde den Code hinzufügen, wo Sie diese einrichten. Ich habe einige Beispiele unter https://github.com/nicknow/BloggingCrm-Dynamics-Crm-Plugin-Unit-Testing-Example/blob/master/BloggingCrm.Account.BusinessLogic.Tests/Prove_that_AccountQueries_Is_Working.cs wie ich FakeXrmEasy benutzt habe Mach diese Art von Tests. – Nicknow

+0

danke @Nicknow Ich habe das zur Frage hinzugefügt –

+0

danke, aber ich war nicht in der Lage, ein hilfreiches Beispiel in Ihrem GitHub zu finden –

Antwort

3

abc_OrderTask ist eine benutzerdefinierte Aktivität. Aktivitäten sind untergeordnete Datensätze ihres betreffenden Objekts (abc_workorder), definiert durch abc_OrderTask.RegardObjectId. Es scheint, dass dies in Ihren Testdaten korrekt eingerichtet ist.

Die GetTasks-Methode wird basierend auf einer benutzerdefinierten N: 1-Beziehung von abc_workorder zu abc_OrderTask mit Suchfeld mit dem Namen abc_workorder_abc_OrderTasks abgefragt.

Sie müssen GetTasks zu filtern abc_OrderTask von RegardingObjectId.Id.

+0

vielen Dank, ich habe die Frage mit Ihrem Vorschlag aktualisiert und bekomme immer noch leere Ergebnismenge –

-1

zwei Optionen:

  1. Ihre WorkOrderService einen Fehler in ihm hat, und Ihr Gerät Test funktioniert einwandfrei.

  2. Das FakeXrmEasy-Framework hat einen Fehler. Ich würde Ihren Test nur ändern, um die abc_OrderTask abzurufen und zu überprüfen, ob es eine InheringObjectId enthält. Wenn dies der Fall ist, aber die Verknüpfung nicht funktioniert, reichen Sie Ihre Ergebnisse auf der GitHub-Seite als Fehler ein.

2

Dank Ihnen allen für alle Antworten :)

Das wird viel schneller & einfacher sein raising an issue with a unit test on the GitHub page so zu beantworten, indem wir könnten das Gerät zu testen und sehen, erstellen und ausführen, was los ist.

Wie auch immer, ich würde sagen Nicknows ist die richtige Antwort, wie Sie Datensätze in den LINQ-Ausdruck mit der 1> N Eigenschaft zu filtern, anstatt was ich früher getan habe, was genau das Gegenteil ist, durch die Filterung assoziierte EntityReference (In Bezug auf ObjectId.Id) wie Nick vorgeschlagen hat.

Grundsätzlich können Sie 1: N-Abfragen filtern, indem Sie die zugehörige Suche verwenden, z. B. contact.ParentCustomerId.Id usw. Und N: N-Datensätze mithilfe der Schnittpunkt-Entität und den zugehörigen Suchvorgängen. Das sollte für LINQ, QueryExpressions und FetchXml funktionieren.

Hoffe, das hilft!

[EDIT]: Wie FakeXrmEasy ist auch selbst als Einheit getestet, werden Sie find loads of different query examples here

Verwandte Themen