MO请DI-Ed dB context in .net core

Moqing DI-ed DbContext in .net core

我开始使用 ef core 为 .net core 中的 (webapi) 应用程序编写测试。 我要测试的存储库如下所示:

   public class MyRepository : IMyRepository
   {
   private readonly IDbContext Db;
   public MyReporitory(IDbContext db) 
      {
         Db = db;
      }
   /// Methods to access the Database
      public List<MyType> Get() {
         return Db.Set<Type>();
      }

在我的测试中,我现在尝试模拟 DBContext:

 var dbContextMock = new Mock<IDBContext>();
 var classToBeTested = new MyRepository(dbContextMock)
 var result = classToBeTested.Get() (or any other method in my repository);
 Assert.That(result, Is.TypeOf<MyType>)

当我 运行 测试时,我得到一个空异常,因为 returned 结果为空(我没有告诉模拟如何 return 数据?) 我如何将数据添加到模拟的 DbContext 以便 Get() 可以获取它?

对 return 数据使用最小起订量设置。如果我是正确的,您已经在界面中创建了一个 Set 方法。只是模拟那个方法

如果您的设置方法 return 是 DbSet 类型,那么您可以使用这段代码模拟它

        var mockDbSet = new Mock<DbSet<TestClass>>();
        mockDbSet.As<IQueryable<TestClass>>().Setup(m => m.Provider).Returns(data.Provider);
        mockDbSet.As<IQueryable<TestClass>>().Setup(m => m.Expression).Returns(data.Expression);
        mockDbSet.As<IQueryable<TestClass>>().Setup(m => m.ElementType).Returns(data.ElementType);
        mockDbSet.As<IQueryable<TestClass>>().Setup(m => m.GetEnumerator()).Returns(data.GetEnumerator);

数据是 IQueryable 类型