1

エンティティを作成し、別のエンティティをFakeXrmEasyでどのようにリンクしますか?fakexrmeasyでリンクされたデータを作成する

私はこのコードをテストしようとしています:abc_OrderTaskとabc_WorkOrder間

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

関係はNです:

:私のテストで1

、私は2つのエンティティをリンクしようとしています

[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でどのようにリンクしていますか?

が、ここでは、このオブジェクトは新しい-ED起床される方法は次のとおりです。

private IOrganizationService _fakeOrganizationService; 

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

来ているでしょうか?それは '_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は、abc_workorderからabc_OrderTaskまでのカスタムN:1の関係に基づいて照会しており、参照フィールドはabc_workorder_abc_OrderTasksです。

GetTasksabc_OrderTaskでフィルタリングする必要があります。RegardingObjectId.Idです。

+0

大変ありがとうございます。あなたの提案で質問を更新しましたが、まだ空の結果セットを取得しています –

-1

つのオプション:

  1. あなたWorkOrderServiceはそれにバグがあり、そして、あなたのユニットテストは完璧に働いています。

  2. FakeXrmEasyフレームワークにはバグがあります。私はabc_OrderTaskを取得し、それにRegardingObjectIdがあることを確認するためにテストを変更したいと思います。そうではあるが、結合が機能していない場合は、GitHubページに結果をバグとして提出してください。

2

おかげですべての答えのためのあなたのすべての:)

これですよも我々が構築し、ユニットテストを実行し、何が起こっているかを見ることができるようにraising an issue with a unit test on the GitHub pageでお答えしやすく&たくさん速く。

とにかく、Nicknow'sは正しい答えですが、LINQ式でレコードをフィルタリングしようとしているときには、私が以前に使っていたものより1 - > Nプロパティを使ってフィルタリングしようとしています。 Nickのように関連EntityReference(RegardingObjectId.Id)が提案していました。

基本的には、contact.ParentCustomerId.Idなどの関連する参照を使用して1:Nのクエリをフィルタリングできます。また、N:Nレコードは、関連エンティティを使用して関連付けられたルックアップとともに使用できます。これはLINQ、QueryExpressions、FetchXmlで有効です。

希望すると便利です。

は、[EDIT]:FakeXrmEasyは、ユニットがテストも自身であるとして、あなたは `_fakeContext`からfind loads of different query examples here

関連する問題