如何为Microsoft.EntityFrameworkCore 3.1方法FirstOrDefaultAsync创建xunit测试?

问题描述 投票:0回答:1

这是我的基本存储库的代码块。

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

我遇到此错误,

EntityFrameworkQueryableExtensions.FirstOrDefaultAsync()不能在设置/验证表达式中使用

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9vdXNaYi5wbmcifQ==” alt =“在此处输入图像描述”>

c# .net-core entity-framework-core moq xunit.net
1个回答
0
投票
[FirstOrDefaultAsyncextension method,它们是

一种特殊的静态方法,但是就像它们是扩展类型上的实例方法一样被调用。

与Moq进行模拟(据我所知,从测试方法来看,我假设您正在使用的Moq)创建了一个从抽象类接口派生的代理对象。由于静态扩展方法

不是抽象类的接口的一部分,因此无法模拟该方法。 (See this question.[不幸的是,Where也是一种扩展方法,这意味着,您也不能嘲笑它。

无论如何,

if

用户存储库只不过是在EF周围提供(封装的)额外层而已,我认为嘲笑EF根本没有任何优点。我也因必须<< everything>可以互换并模拟到单元测试类的谬论而迷失了方向,这对逻辑很好(尽管不一定必要,但这是另外一个故事),但在您的情况下值得怀疑。
© www.soinside.com 2019 - 2024. All rights reserved.