使用fakexrmeasy创建链接数据

时间:2017-02-15 17:11:46

标签: c# dynamics-crm-2011 microsoft-dynamics fakeiteasy 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 个答案:

答案 0 :(得分:3)

func indexHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.Error(w, "Not found", 404) return } ... whatever code you had here before. } 是一项自定义活动。活动是其关联对象(abc_OrderTask)的子记录,由abc_workorder定义。它似乎在您的测试数据中正确设置。

正在测试的方法GetTasks正在使用名为abc_OrderTask.RegardObjectId的查找字段,根据abc_workorderabc_OrderTask之间的自定义N:1关系进行查询。

您需要修复abc_workorder_abc_OrderTasksGetTasks过滤abc_OrderTask

答案 1 :(得分:2)

谢谢大家的所有答案:)

这会更快更快更容易通过raising an issue with a unit test on the GitHub page回答,以便我们可以构建并运行单元测试,看看发生了什么。

无论如何,我会说Nicknow是正确的答案,因为你试图使用1-&gt; N属性来过滤LINQ表达式中的记录而不是我过去做的事情,这恰恰相反,过滤了与Nick建议相关的EntityReference(AboutObjectId.Id)。

基本上,您可以使用关联的查找过滤1:N查询,例如contact.ParentCustomerId.Id等。N:N记录使用交叉实体及其关联的查找。这应该适用于LINQ,QueryExpressions和FetchXml。

希望这有帮助!

[编辑]:由于FakeXrmEasy本身也经过单元测试,你将find loads of different query examples here

答案 2 :(得分:-1)

两个选项:

  1. 您的WorkOrderService中存在错误,您的单元测试工作正常。

  2. FakeXrmEasy框架中有一个错误。我改变你的测试只是为了检索abc_OrderTask并验证它有一个AboutObjectId。如果确实如此,但是联接不起作用,那么将您在GitHub页面上的发现作为错误提交。