首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用虚假度量创建链接数据

用虚假度量创建链接数据
EN

Stack Overflow用户
提问于 2017-02-15 17:11:46
回答 3查看 1.4K关注 0票数 2

如何在FakeXrmEasy?中创建实体并将另一个实体链接到它

我正在尝试测试以下代码:

代码语言:javascript
复制
    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的关系为N:1

在我的测试中,我试图将这两个实体联系起来:

代码语言:javascript
复制
    [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?中创建实体并将另一个实体链接到它

下面是这个对象是如何更新的:

代码语言:javascript
复制
    private IOrganizationService _fakeOrganizationService;

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-16 02:42:14

abc_OrderTask是一种自定义活动。活动是它们的有关对象(abc_workorder)的子记录,由abc_OrderTask.RegardObjectId定义。在您的测试数据中,这似乎是正确的设置。

正在测试的方法GetTasks基于abc_workorderabc_OrderTask的自定义N:1关系进行查询,查找字段名为abc_workorder_abc_OrderTasks

您需要修复GetTasks以通过RegardingObjectId.Id过滤abc_OrderTask

票数 4
EN

Stack Overflow用户

发布于 2017-02-16 08:54:22

谢谢你们所有的回答:)

这将变得更快&更容易由在GitHub页面上引发单元测试问题来回答,这样我们就可以构建和运行单元测试,并查看发生了什么。

无论如何,我会说Nicknow是正确的答案,因为您正试图使用1->N属性过滤LINQ表达式中的记录,而不是我过去所做的,这正好相反,由关联的EntityReference (RegardingObjectId.Id)过滤,就像尼克建议的那样。

基本上,您可以通过使用关联查找(如contact.ParentCustomerId.Id等)过滤1:N查询,通过使用intersect过滤N:N记录,以及它们的关联查找。这应该适用于LINQ、QueryExpressions和FetchXml。

希望这能有所帮助!

编辑:由于FakeXrmEasy本身也是单元测试的,所以您将使用在这里查找大量不同的查询示例

票数 4
EN

Stack Overflow用户

发布于 2017-02-15 20:41:04

有两种选择:

  1. 您的WorkOrderService中有一个错误,您的单元测试运行得非常完美。
  2. FakeXrmEasy框架中有一个bug。我会更改您的测试,以检索abc_OrderTask并验证它是否有一个RegardingObjectId。如果是这样,但连接不起作用,那么将您的发现作为一个bug提交到GitHub页面。
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42255941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档