猿问

使用 Ninject 时如何模拟通用 Get 方法并使用 SetUp 方法填充模拟数据库?

我在我的解决方案中使用Ninject和Moq进行了设置。我使用实体框架,并使用 FakeDbSet 实现(见下文)。这让我得到GetById,Create,Update和其他方法,因为我实现了自己的方式进行工作。


我所有的服务都有一个方法,例如:


List<Invoice> GetBySpecification(InvoiceSpecification specification);

这是唯一一个我不能轻易模拟的,因为我的实现是这样的,我使用DbContext和 useWhere语句。


 public int GetBySpecification(InvoiceSpecification specification)

        {

            IQueryable<Invoice> query = BuildQuery(specification);

            return query.Count();

        }


        public IQueryable<Invoice> BuildQuery(InvoiceSpecification specification)

        {

            IQueryable<Creditor> query = _db.Creditors;


            if (!string.IsNullOrWhiteSpace(specification.Query))

            {

                var search = specification.Query.ToLower().Trim();

                query = query.Where(c => c.OfficeEmail.Contains(search)

                    || c.OfficePhone.Contains(search)

                    || c.CompanyRegistrationNumber.Contains(search)

                    || c.CompanyName.Contains(search)

                    || c.LastName.Contains(search)

                    || c.FirstName.Contains(search));

            }

            if (!string.IsNullOrWhiteSpace(specification.CompanyRegistrationNumber))

            {

                var search = specification.CompanyRegistrationNumber.ToLower().Trim();

                query = query.Where(c => c.CompanyRegistrationNumber == search);

            }

            if (specification.UpdateFrequency.HasValue)

            {

                query = query.Where(c => c.UpdateFrequency == specification.UpdateFrequency.Value);

            }


            return query.Where(c => !c.DateDeleted.HasValue);

        }

我的问题:


我希望能够SetUp在我运行课程时使用 a 。我想测试我的GetBySpecification和BuildQuery方法,我在其他方法中使用这些方法并不少见。


我希望能够运行 SetUp 方法,使用我填充到列表中的 C# 对象在内存中提供一些“基本数据库”,因此当我使用时_db.Creditors,它返回我设置的自定义债权人列表,然后使用查询在那一个。


我想我很远,但不完全确定我从这里如何继续。我想我需要以某种方式更新我的 Resolver / FakeDb 集,但我真的很感激有人在正确的方向上帮助我。


慕莱坞森
浏览 114回答 1
1回答
随时随地看视频慕课网APP
我要回答