Невозможно вызвать AddRange в двойном тесте DbSet - PullRequest
1 голос
/ 18 июня 2019

Я делаю рефакторинг раздела старого кода, чтобы сделать его более тестируемым. Часть этого состоит в том, чтобы реализовать тестовый двойник структуры сущности 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 работает как положено. Поэтому у меня должно быть что-то, что мешает этому в моем проекте, однако я не могу определить причину.

Что может помешать вызову override в моем производном классе DbSet?

В настоящее время моя работа заключается в том, чтобы использовать вместо этого Add.

1 Ответ

0 голосов
/ 20 июня 2019

Так что я бездельничал и удалил выражение yield Вдруг это работает. Понятия не имею, почему.

public override IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities)
{
    foreach (var entity in entities)
    {
        _data.Add(entity);
    }
    return entities;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...