首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.net内核中的墨青DI-ed DbContext

.net内核中的墨青DI-ed DbContext
EN

Stack Overflow用户
提问于 2020-06-02 16:10:38
回答 1查看 48关注 0票数 0

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

代码语言:javascript
运行
复制
   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:

代码语言:javascript
运行
复制
 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>)

当我运行测试时,我得到了一个空异常,因为返回的结果是空的(并且我没有告诉mock如何返回数据?)我如何将数据添加到模拟的DbContext中,以便Get()可以获取数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 16:15:42

使用moq setup返回数据。如果我没记错的话,你已经在你的接口中创建了一个Set方法。只需模拟该方法

如果你的set方法返回一个DbSet类型,那么你可以用下面这段代码来模拟它

代码语言:javascript
运行
复制
        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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62147581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档