这是我的基础回购代码块。

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

我收到此错误,

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

在此处输入图片说明

#1楼 票数:1

FirstOrDefaultAsync是一个扩展方法,它们是

一种特殊的静态方法,但它们被称为扩展类型的实例方法。

使用 Moq 进行模拟(我假设您正在使用的Moq,就我对您的测试方法的了解而言)创建一个从抽象类的接口派生的代理对象。 由于静态扩展方法不是抽象类接口的一部分,因此您不能模拟该方法。 见这个问题。

不幸的是, Where也是一个扩展方法,这意味着你也不能嘲笑它。

无论如何,如果用户存储库只是在 EF 周围提供一个(封装的)额外层,我认为模拟 EF 根本没有任何价值。 我也陷入了这样一种谬论,即一切都必须可交换并模拟到单元测试类,这对逻辑来说很好(虽然不一定必要,但那是另一回事),但在你的情况下是有问题的。

  ask by Prakash translate from so

未解决问题?本站智能推荐:

1回复

如果基于条件执行了方法,请使用xUnit和Moq进行验证

使用xUnit和Moq检查是否根据另一个方法的返回值执行方法。 例: 我想验证这样的事情: 是否可以使用xUnit和Moq做类似的事情?
1回复

如何模拟自定义属性的属性以对其进行测试?

我很难理解如何在需要模拟内部状态属性的地方测试自定义属性。 该属性添加了扩展方法。 Configuration属性是一个静态属性,在实践中效果很好,但在运行并行测试时不起作用。 我所拥有的一些伪代码: 测试示例: 如果我模拟IConfiguration并设置static属性,则
1回复

Moq和EntityFrameworkCore不适用于异步方法吗?

我正在尝试使用Moq和EF Core通过其异步方法(例如AddAsync和SaveChangesAsync )创建测试存储库,但是我没有丝毫成功…… 我发现了很多博客文章(包括此处的问题),但对我而言没有任何用处。 例如,我从字面上复制了本文中的代码,并尝试实现其引用:[ https:/
1回复

在.NETCORE中模拟实体框架模型的最佳方法是什么?

我是实体框架的新手。 我的模型有一个数据上下文。 我们已经使用 DB First 方法来创建该模型。 我已经在这个模型上执行了添加操作和获取操作。 现在我想在我的 Nunit 测试中包含这些操作。 我们为此使用最小起订量。 我还没有考虑为 DataContext 创建任何接口。 我在模拟数据库表和命
2回复

如何传递我的DbContext对象以使用xunit和moq进行测试

下面提到的是检查特定事务 ID 是否存在详细信息的测试函数。 _serviceScopeFactory 在哪里 在上面的函数中,它为特定的 transactionId ("123") 调用 _bspRepository.GetBlobDetails 所以这里是 GetBlobDetails 的定义
2回复

单元测试一个方法调用同一个类中的另一个方法

我在一个类上有两个公共方法,都是从外部代码调用的,但其中一个方法也调用另一个。 我想对一个方法进行单元测试,并验证它调用同一类中的另一个公共方法,然后我将进行单独的测试来测试另一个方法。 结构看起来像这样: 对于GetCalculatedDetailsForEntity ,我会模拟依赖项,验证它们被
1回复

验证Xunit中方法的执行顺序

我必须编写测试用例来验证链式方法的执行顺序。 假设我已经编写了如下所示的代码 如何编写测试用例来检查首先执行的 SetInput,第二个执行的方法,等等? 如果有人更改了方法链的实际实现或顺序,那么测试用例应该会失败。 我知道我不能模拟扩展方法,那么编写测试用例来检查方法执行顺序的最佳方法是什么。
1回复

如何使用XUnit编写一个简单的测试用例?

完全陌生的测试,我有一个像这样的控制器: 现在,我添加了一个测试项目,试图在其中使用XUnit和Moq。 我只是想创建一个控制器对象,就像在一个非常简单的项目中所做的那样,但是在此方法中不起作用。 它说: 没有给出与'CheckRegController.CheckRegCont