c# - .net core中的魔清DI-ed DbContext
问题描述
我开始使用 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>)
当我运行测试时,我得到一个空异常,因为返回的结果是空的(我没有告诉模拟如何返回数据?)如何将数据添加到模拟的 DbContext 以便 Get() 可以得到它?
解决方案
使用最小起订量设置返回数据。如果我是正确的,你已经在你的界面中创建了一个 Set 方法。只是嘲笑那个方法
如果您的 set 方法返回 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 类型
推荐阅读
- vuetify.js - 将 vee-validate 标志与 Vuetify errors.collect 一起使用
- python - call Python method if it exists
- javascript - Make classes in javascript with arrays
- c# - 连接到本地 nCache
- c# - Android - 从另一个片段启动片段
- postgresql - 有没有办法在 Postgresql 中跟踪函数依赖关系?
- jquery - 麻烦调试ajax
- php - HTML 下拉菜单不会生成选定的 MySQL 表
- database-design - 物理模型说明
- qt - 转换为 Qt 的 C 代码在执行时崩溃