[英]Mocking Entity Framwork using Moq not returning DbSet<T>
I have a DbSet which I have mocked and exposed.我有一个我已经模拟和公开的 DbSet。 I have filled some departments to the context.我已经根据上下文填充了一些部门。 NOw when I access those Departments, I get null.现在,当我访问这些部门时,我得到 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
}
Can anyone please let me know what I am doing wrong.谁能让我知道我做错了什么。 As the rest of the test cases depend on accessing context.Object.Departments.由于测试用例的 rest 依赖于访问 context.Object.Departments。
You need to mock the .Set<>
as below 您需要如下模拟.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);
Is there a way to return a null value?有没有办法返回 null 值? so instead of: .Returns(GetDbSetMock(departments).Object);所以代替: .Returns(GetDbSetMock(departments).Object); Something like this?像这样的东西? .Returns(GetDbSetMock(null).Object); .Returns(GetDbSetMock(null).Object); I have a unit test that is looking for a null response from the database.我有一个单元测试正在从数据库中寻找 null 响应。
Not sure how to mock it.不知道如何模拟它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.