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