如何在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的关系为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();
}发布于 2017-02-16 02:42:14
abc_OrderTask是一种自定义活动。活动是它们的有关对象(abc_workorder)的子记录,由abc_OrderTask.RegardObjectId定义。在您的测试数据中,这似乎是正确的设置。
正在测试的方法GetTasks基于abc_workorder到abc_OrderTask的自定义N:1关系进行查询,查找字段名为abc_workorder_abc_OrderTasks。
您需要修复GetTasks以通过RegardingObjectId.Id过滤abc_OrderTask。
发布于 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本身也是单元测试的,所以您将使用在这里查找大量不同的查询示例
发布于 2017-02-15 20:41:04
有两种选择:
https://stackoverflow.com/questions/42255941
复制相似问题