无法在DbSet测试双打上调用AddRange

时间:2019-06-18 14:27:38

标签: c# unit-testing entity-framework-6

我正在重构旧代码的一部分,使其更具可测试性。其中的一部分是对实体框架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派生类中调用?

我现在的解决方法是改用“添加”。

1 个答案:

答案 0 :(得分:0)

因此,我弄乱了并删除了yield语句。突然它起作用了。不知道为什么。

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