首页 > 解决方案 > 有什么方法可以调用数据库数据在单元测试中提供

问题描述

这是我的测试:

[Test]
public async Task Late_Test()
{
  var options = new DBContextOptionsBuilder<MyContext>()
  .Options;
  
  using(var context = MyContext(options))
  {
    //Act?
  }
    // Assert?
}

这是我试图为其创建测试的服务:

public async Task<int> LatesInMin(Model1 model1, bool isbool) 
{
 //code here
}

服务中的代码还需要附加到 Model1 的外键中的数据。我可以从数据库中调用数据并在调用服务时将其用作参数吗?还是我也必须手动提供该数据?我尝试使用 linq 导致错误,我搜索到您不能使用扩展方法,例如 'Where()' 和 'FirstOrDefault()'

标签: c#unit-testingtestingmockingmoq

解决方案


为了使您的测试独立且可预测,您需要确保设置和拆除与测试相关的任何内容。因此,您应该使用测试代码旁边的数据或在每次测试之前加载的关联文件中的数据作为数据源的种子。我基本上想要得到的是,我认为您应该将所需的所有数据从数据库中提取出来,将其保存到某个文件中,然后在运行每个测试之前将其加载。通过“加载”,您可以启动一个真实的数据库并保存值,或者您可以使用InMemoryDatabase实体框架提供的功能。


推荐阅读