如何在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();
}
答案 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_workorder
到abc_OrderTask
之间的自定义N:1关系进行查询。
您需要修复abc_workorder_abc_OrderTasks
以GetTasks
过滤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)
两个选项:
您的WorkOrderService中存在错误,您的单元测试工作正常。
FakeXrmEasy框架中有一个错误。我改变你的测试只是为了检索abc_OrderTask并验证它有一个AboutObjectId。如果确实如此,但是联接不起作用,那么将您在GitHub页面上的发现作为错误提交。