我在我的解决方案中使用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 集,但我真的很感激有人在正确的方向上帮助我。
相关分类