当前位置: 首页 > 知识库问答 >
问题:

无法正确模拟DbSet以测试基础实体上的更新功能

钱言
2023-03-14
DbSet<Student> Students{get;set;}

编辑:PrestroLContext现在是一个IPrestroLContext实例,通过依赖注入处理。

public async Task<int> UpdatePreSchoolStudentAsync(Student student)
{   
    PreSchoolContext.Set<Student>().AddOrUpdate(student);
    var result = await PreSchoolContext.SaveChangesAsync().ConfigureAwait(false);
    return result;              
}       

试验方法

//Arrange
var data = GetStudents().AsQueryable();
var mockSet = new Mock<DbSet<Student>>();
mockSet.As<IQueryable<Student>>().Setup(m => m.Provider).Returns(new TestDbAsyncQueryProvider<Student>(data.Provider));
mockSet.As<IQueryable<Student>>().Setup(m => m.Expression).Returns(data.Expression);

var preSchoolContextMock = new Mock<IPreSchoolContext>();
preSchoolContextMock.Setup(c => c.Students).Returns(mockSet.Object);

var repo = new PreSchoolRepository(preSchoolContextMock.Object);

//Act
var preSchoolStudentUpdateFlag = await repo.UpdatePreSchoolStudentAsync(data.FirstOrDefault());

//Assert
preSchoolStudentUpdateFlag.ShouldNotBeNull();
preSchoolStudentUpdateFlag.ShouldBe(1);

错误

无法对派生的IDbSet类型“Castle.proxies.dbSet”1Proxy“调用公共实例方法AddOrUpdate。找不到方法。

无法理解缺少什么来正确设置模拟数据。

共有1个答案

伏欣悦
2023-03-14

在这里,我对设计进行了一些更改,以测试dbset<>更新功能:

在“我的上下文”类下添加了以下函数:

public virtual void AddOrUpdateEntity<TEntity>(IProMetrixContext db, 
TEntity[] entities) where TEntity : class
{
     db.Set<TEntity>().AddOrUpdate(entities);
}   

然后将updatePrestrolStudentAsync(StudentStudent)方法稍加更改为:

public async Task<int> UpdateProMetrixRiskAsync(Student student)
{
        PreSchoolContext.AddOrUpdateEntity<Student>(PreSchoolContext, student); //This one resolved issue of unit test and works fine in real scenario too.
        var result = await PreSchoolContext.SaveChangesAsync().ConfigureAwait(false);
        return result;
}
 类似资料:
  • null 以下是我到目前为止所尝试的: 专业人士 在第一次调用后恢复到原始实现 null null null 代码: 专业人士 完全控制模拟结果 null null 代码:

  • 因为我编码C已经超过20年了,我想我是时候参加一次测试了!看看我是不是学到了什么,或者我只是在网上给初学者发免费但不正确的建议。 这个网站(我不是附属)提供免费的C测试。https://www.tutorialspoint.com/cprogramming/cprogramming_mock_test.htm。

  • 在Symfony 2(最新版本)下,我试图更新我的实体: 我得到了这个错误消息到我的终端: [Symfony\Component\Config\Definition\Exception\InvalidConfigurationException] 无法识别的选项“security.firewalls.access\u control”下的“0、1、2、3” 我是Symfony的新手,我不知道在哪里

  • 问题内容: 抱歉,我真的很想念React中子组件内部的传递。 我已经实现了一个包含3个组件的待办事项列表。 有一个组成部分和一个组成部分。状态仅存储在组件中。 显示器起步不错,因此可以看到道具。但是在提交表单后,我收到了以下错误: TypeError:this.props.tasks.map不是函数 当我console.log时,我没有得到我的数组,而是数组的长度。 你知道为什么吗? 编辑 :谢谢

  • 考虑一个3D太阳系模拟。 我的模拟循环: null 提升FPS 降低我的行星的速度(降低引力常数??) 与呈现循环一起运行相比,有一个单独的模拟循环,但速度更快 对于任何感兴趣的人,我使用的是three.js。

  • 问题内容: 在使用Hibernate的Spring MVC应用程序中,无法将在ManyToMany关系中连接两个实体的列表正确填充。实体是和。该实体有一个属性,它是名单的实体,而这是不正确填充。有人可以帮我弄清楚如何修正我的代码,以便实体开始正确填充吗? 未能正确填充ArrayList的控制器方法的代码如下: 前面代码中的命令输出以下内容: 从上面的输出可以看到,只有一个对象大于0 。尽管事实是每