【发布时间】:2017-07-04 12:01:47
【问题描述】:
如何在 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();
}
【问题讨论】:
-
_fakeContext来自哪里?它与_fakeOrganizationService有什么关系?我会在你设置这些的地方添加代码。我在github.com/nicknow/… 有一些示例,说明我如何使用 FakeXrmEasy 进行此类测试。 -
感谢@Nicknow 我将其添加到问题中
-
谢谢您,但我无法在您的 github 中找到有用的示例
-
您是否也尝试过:where workOrder.abc_workorderId == workOrderGuid 而不是 where workOrder.Id == workOrderGuid? CRM LINQ 不知道 .Id 属性,只知道 crm 字段,因此您需要在那里使用 PK。
-
同样适用于连接:在 task.RegardingObjectId.Id 上等于 workOrder.abc_workorderId
标签: c# dynamics-crm-2011 microsoft-dynamics fakeiteasy fakexrmeasy