作为我开始为我的代码编写更多测试的努力的一部分,我使用了一个模拟的DataContext,其中包含用于单元测试的虚拟数据列表。
但是,我遇到了我正在测试的方法返回正确结果的尴尬情况,但是针对虚拟DataContext验证这些结果的测试代码却没有。
我正在测试的方法是:
var earns = earnService.GetEarnsForCharacter(character.Id);
这将返回仅具有Id,Title和Display属性的非规范化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);
}
但是,出于某种原因,虽然earns
变量包含预期的2个对象,但无论我做什么,worldIds可枚举都包含3个对象。我也试过在where earns.Select(t => t.Id).Contains(e.Id)
添加一个where子句,但这对结果也没有任何影响。
非常感谢任何建议!
答案 0 :(得分:0)
如果mockedDataContext.Object.Get<Earn>()
返回两个具有相同Id值的项目,则您的联接将返回3条记录而不是预期的两条记录。