[英]Mocking Entity Framwork using Moq not returning DbSet<T>
我有一個我已經模擬和公開的 DbSet。 我已經根據上下文填充了一些部門。 現在,當我訪問這些部門時,我得到 null。
private Mock<DbSet<Department>> departmentSet;
private Mock<DemoEntities> context;
[TestInitializeAttribute()]
public void TestInit()
{
context = new Mock<DemoEntities>();
departmentSet = new Mock<DbSet<Department>>();
context.Setup(c => c.Departments).Returns(departmentSet.Object);
context.Object.Departments.Add(new Department() { Name = "HR", Id = 1 });
context.Object.Departments.Add(new Department() { Name = "Operations", Id = 2 });
context.Object.SaveChanges();
var list = context.Object.Departments; //returns null
}
誰能讓我知道我做錯了什么。 由於測試用例的 rest 依賴於訪問 context.Object.Departments。
您需要如下模擬.Set<>
private static Mock<DbSet<T>> GetDbSetMock<T>(IEnumerable<T> items = null) where T : class
{
if (items == null)
{
items = new T[0];
}
var dbSetMock = new Mock<DbSet<T>>();
var q = dbSetMock.As<IQueryable<T>>();
q.Setup(x => x.GetEnumerator()).Returns(items.GetEnumerator);
return dbSetMock;
}
var mockContext = new Mock<MyDbContext>();
var users = new List<User> { new User { Email = "my@email.com", Id = 1 } };
mockContext.Setup(x => x.Set<User>()).Returns(GetDbSetMock(users).Object);
有沒有辦法返回 null 值? 所以代替: .Returns(GetDbSetMock(departments).Object); 像這樣的東西? .Returns(GetDbSetMock(null).Object); 我有一個單元測試正在從數據庫中尋找 null 響應。
不知道如何模擬它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.