首页 > 解决方案 > 无法在 DbSet 测试替身上调用 AddRange

问题描述

我正在重构一段遗留代码以使其更具可测试性。其中一部分是实现实体框架的测试替身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,我会NotImplementedException从 DbSet 类中得到一个。

我从头开始了一个新项目AddRange并按预期工作。所以我的项目中一定有一些干扰它的东西,但是我无法确定原因。

什么可以阻止我在派生类中调用我的覆盖DbSet

我现在的工作是使用 Add 代替。

标签: c#unit-testingentity-framework-6

解决方案


所以我搞砸了并删除了产量声明。突然它起作用了。不知道为什么。

public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
    foreach (var entity in entities)
    {
        _data.Add(entity);
    }
    return entities;
}

推荐阅读