Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq:连接或where条件被忽略_C#_Linq_Unit Testing - Fatal编程技术网

C# Linq:连接或where条件被忽略

C# Linq:连接或where条件被忽略,c#,linq,unit-testing,C#,Linq,Unit Testing,作为开始为代码编写更多测试工作的一部分,我正在使用模拟DataContext,其中包含用于单元测试的虚拟数据列表 但是,我遇到了一个尴尬的情况,即我正在测试的方法返回正确的结果,但是针对伪DataContext验证这些结果的测试代码却没有 我正在测试的方法是: var-earns=earnService.GetEarnsForCharacter(character.Id) 这将返回仅具有Id、标题和显示属性的非规范化Earn对象列表。实际的数据实体有更多的属性,包括我正在测试的WorldId。我

作为开始为代码编写更多测试工作的一部分,我正在使用模拟DataContext,其中包含用于单元测试的虚拟数据列表

但是,我遇到了一个尴尬的情况,即我正在测试的方法返回正确的结果,但是针对伪DataContext验证这些结果的测试代码却没有

我正在测试的方法是:
var-earns=earnService.GetEarnsForCharacter(character.Id)

这将返回仅具有Id、标题和显示属性的非规范化Earn对象列表。实际的数据实体有更多的属性,包括我正在测试的WorldId。我希望返回的Earn对象的WorldId等于
character.WorldId

我想我应该可以做这样的事情:

// Execute the method we're testing
var earns = earnService.GetEarnsForCharacter(character.Id);

// Assert that the character's world id is indeed equal to the world id's of all the selected earns
// First, fetch the earns from the datacontext
var worldIds = from ec in earns join e in mockedDataContext.Object.Get<Earn>() on ec.Id equals e.Id select e.WorldId;
foreach (var worldId in worldIds)
{
    Assert.AreEqual(character.WorldId, worldId);
}
//执行我们正在测试的方法
var earns=earnService.GetEarnsForCharacter(character.Id);
//断言角色的世界id确实等于所有选定收入的世界id
//首先,从datacontext获取收益
var worldIds=from ec in earns join e in mockedDataContext.Object.Get()on ec.Id等于e.Id选择e.WorldId;
foreach(worldId中的变量worldId)
{
Assert.AreEqual(character.WorldId,WorldId);
}
但是,由于某种原因,
earns
变量包含预期的2个对象,而worldIds enumerable包含3个对象,无论我做什么。我曾尝试添加一个where子句,其中包含
where earns.Select(t=>t.Id).Contains(e.Id)
,但这对结果也没有任何影响


任何建议都将不胜感激

如果
mockedDataContext.Object.Get()
返回两个具有相同Id值的项,则您的联接将返回3条记录,而不是预期的两条记录。

worldId的数据类型是什么?
mockedDataCotext.Object.Get()
不会返回两个具有相同Id值的项,是吗?如果它这样做了,那将解释3条记录而不是2条!事实上是的!我简直不敢相信我错过了:(我想当我开始错过这样的事情时,我的虚拟数据上下文有点失控了。如果你想从那条评论中得到答案,我很乐意接受!检查这个链接。@RogierPennink作为答案添加。