Emi*_*ski 18 .net c# ado.net unit-testing entity-framework
我正在尝试模拟DbContext和DbSet.这适用于我之前的单元测试,但是当我的代码第二次在DbSet上调用ToList方法时出现问题.
首先,dbSet.ToList()返回模拟结果.第二个返回0个元素;
var queryableData = new List<string>{ "a", "b", "c" }.AsQueryable();
var mockDbSet = new Mock<DbSet<string>>();
var q = mockDbSet.As<IQueryable<string>>();
q.Setup(m => m.Provider).Returns(queryableData.Provider);
q.Setup(m => m.Expression).Returns(queryableData.Expression);
q.Setup(m => m.ElementType).Returns(queryableData.ElementType);
q.Setup(m => m.GetEnumerator()).Returns(queryableData.GetEnumerator());
DbSet<string> dbset = mockDbSet.Object;
IQueryable<string> query = dbset;
//RESULTS: abc
var a1 = dbset.ToList();
foreach (var a in a1)
Console.Write(a);
//NO RESULTS
var a2 = dbset.ToList();
foreach (var a in a2)
Console.Write(a);
Run Code Online (Sandbox Code Playgroud)
Wik*_*hla 39
每次调用时都返回相同的枚举器实例GetEnumerator.当它枚举一次,它完成后,EF不会调用它的Reset方法,而是要求一个新的枚举器.
但是你返回的只是已经产生了所有元素并且不再产生的那个.
相反,返回一个返回枚举器的函数,每次请求它时都会返回一个新的枚举器.
q.Setup(m => m.GetEnumerator()).Returns( () => queryableData.GetEnumerator() );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3515 次 |
| 最近记录: |