无法在 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;
}