无法在 DbSet 测试替身上调用 AddRange
Unable to call AddRange on DbSet test double
我正在重构一部分遗留代码以使其更易于测试。其中一部分是实现 entity framework DbSet
的测试替身。我已按照此处 https://docs.microsoft.com/en-us/ef/ef6/fundamentals/testing/writing-test-doubles 的步骤进行操作,并且效果很好。
现有的 class 使用 AddRange
所以我向 TestDbSet 添加了一个覆盖 class.
public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
foreach (var entity in entities)
{
yield return Add(entity);
}
}
我试着调用它
myDbContext.Persons.AddRange(newPersons);
但是 AddRange
永远不会被调用。如果我评论 AddRange
我从 DbSet class.
得到一个 NotImplementedException
我从头开始了一个新项目,AddRange
按预期工作。所以我的项目中一定有什么东西干扰了它,但是我无法确定原因。
什么可以阻止我的覆盖在 DbSet
的派生 class 中被调用?
我现在的解决方法是改用添加。
所以我搞砸了,删除了 yield 语句。突然它起作用了。不知道为什么。
public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
foreach (var entity in entities)
{
_data.Add(entity);
}
return entities;
}
我正在重构一部分遗留代码以使其更易于测试。其中一部分是实现 entity framework DbSet
的测试替身。我已按照此处 https://docs.microsoft.com/en-us/ef/ef6/fundamentals/testing/writing-test-doubles 的步骤进行操作,并且效果很好。
现有的 class 使用 AddRange
所以我向 TestDbSet 添加了一个覆盖 class.
public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
foreach (var entity in entities)
{
yield return Add(entity);
}
}
我试着调用它
myDbContext.Persons.AddRange(newPersons);
但是 AddRange
永远不会被调用。如果我评论 AddRange
我从 DbSet class.
NotImplementedException
我从头开始了一个新项目,AddRange
按预期工作。所以我的项目中一定有什么东西干扰了它,但是我无法确定原因。
什么可以阻止我的覆盖在 DbSet
的派生 class 中被调用?
我现在的解决方法是改用添加。
所以我搞砸了,删除了 yield 语句。突然它起作用了。不知道为什么。
public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
foreach (var entity in entities)
{
_data.Add(entity);
}
return entities;
}