我正在嘗試爲測試目的設置模擬DbSet。我在這裏使用了教程,http://www.loganfranken.com/blog/517/mocking-dbset-queries-in-ef6/並略微修改了它,所以每次調用GetEnumerator都會返回一個新的枚舉器(我遇到的另一個問題)。但是,我很難將項目添加到DbSet。如何將項目添加到模擬DbSet(使用Moq)
輸出是preCount = 3 postCount = 3.但是,我期望它是預計數= 3 postCount = 4.任何幫助非常感謝。
static void Main(string[] args)
{
Debug.WriteLine("hello debug");
List<string> stringList = new List<string>
{
"a", "b", "c"
};
DbSet<string> myDbSet = GetQueryableMockDbSet(stringList);
int preCount = myDbSet.Count();
myDbSet.Add("d");
int postCount = myDbSet.Count();
Debug.WriteLine("preCount = " + preCount + " postCount = " + postCount);
}
private static DbSet<T> GetQueryableMockDbSet<T>(List<T> sourceList) where T : class
{
var queryable = sourceList.AsQueryable();
var dbSet = new Mock<DbSet<T>>();
dbSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(queryable.Provider);
dbSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(queryable.Expression);
dbSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(queryable.ElementType);
dbSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator());
return dbSet.Object;
}
很不錯的方法來封裝創建dbSet。 你有沒有更新過這個來支持異步查詢? –
至少目前與.net核心1.0,這將回答異步問題:[如何使用實體框架核心模擬異步存儲庫](https://stackoverflow.com/questions/40476233/how-to-mock -an-async-repository-with-entity-framework-core) –