我正在重构旧代码的一部分,使其更具可测试性。其中的一部分是对实体框架DbSet
进行双重测试。我已经按照https://docs.microsoft.com/en-us/ef/ef6/fundamentals/testing/writing-test-doubles的步骤进行了,并且工作正常。
现有类使用AddRange
,所以我向TestDbSet类添加了覆盖。
public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
foreach (var entity in entities)
{
yield return Add(entity);
}
}
我尝试称呼它
myDbContext.Persons.AddRange(newPersons);
然而,AddRange
从未被调用。如果我将AddRange
注释掉,则会从DbSet类中得到一个NotImplementedException
。
我从头开始了一个新项目,AddRange
可以正常工作。因此,在我的项目中,我必须有一些干扰它的东西,但是我无法确定原因。
什么可以阻止我的覆盖在我的DbSet
派生类中调用?
我现在的解决方法是改用“添加”。
答案 0 :(得分:0)
因此,我弄乱了并删除了yield语句。突然它起作用了。不知道为什么。
public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
foreach (var entity in entities)
{
_data.Add(entity);
}
return entities;
}