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 类型
我开始使用 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 类型