Как создать тест xunit для метода Microsoft.EntityFrameworkCore 3.1 FirstOrDefaultAsyn c? - PullRequest
0 голосов
/ 21 февраля 2020

Это мой блок кода для базового репо.

public async Task<T> ReadAsync(Expression<Func<T, bool>> where = null)
{
   return await this.dbSet.Where(where).FirstOrDefaultAsync<T>();
}

Я получаю эту ошибку,

EntityFrameworkQueryableExtensions.FirstOrDefaultAsyn c () не может использоваться в выражения настройки / проверки

enter image description here

1 Ответ

1 голос
/ 21 февраля 2020

FirstOrDefaultAsync - это метод расширения , который

является особым видом метода stati c, но они вызываются так, как если бы они были методами экземпляра в расширенный тип.

Перемешивание с Moq (я предполагаю, что это Moq, который вы используете, насколько я могу судить по тому, что я вижу из ваших методов тестирования) создает прокси-объект, полученный из интерфейса абстрактного класса. Так как метод расширения stati c не является частью вашего интерфейса абстрактного класса , вы не можете высмеивать этот метод. ( См. Этот вопрос. )

К сожалению, Where также является методом расширения, что означает, что вы тоже не можете его высмеивать.

В любом случае, , если пользовательский репозиторий не делает ничего, кроме предоставления (инкапсулированного) дополнительного слоя вокруг EF, я бы сказал, что насмешливый EF вообще не имеет смысла. Я тоже впал в заблуждение, что все должно быть заменено и смоделировано для классов юнит-теста, что хорошо для логики c (хотя и не обязательно, но это другая история), но сомнительно в твой случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...