Deneme amacıyla sahte bir DbSet kurmaya çalışıyorum. Burada, http://www.loganfranken.com/blog/517/mocking-dbset-queries-in-ef6/ eğitimini kullandım ve biraz değiştirdim, böylece GetEnumerator her seferinde yeni bir numaralayıcı döndürüyor (başka bir sorunla karşılaşıyordum). Ancak, DbSet'e öğe eklerken güçlük çekiyorum.Mock DbSet'e öğe ekleme (Moq kullanarak)
Çıktı preCount = 3 postCount = 3'tür. Ancak, precount = 3 postCount = 4 olmasını beklerim. Herhangi bir yardım büyük beğeni topluyor.
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;
}
Çok güzel yöntem. Senkronize olmayan sorguları desteklemek için bunu herhangi bir şekilde güncellediniz mi? –
Bu, en azından şu an için .net core 1.0 ile, async sorununu yanıtlayacaktır: [Bir Varlık Deposu ile birlikte bir async deposu nasıl kopyalanır] (https://stackoverflow.com/questions/40476233/how-to-mock -en-async-varlık-çerçeve-çerçeve-çekirdek) –