c# linq moq dbset

c# - Cómo agregar un artículo a un DbSet simulado(usando Moq)



linq (1)

myDbSet no es una implementación real de DbSet sino un simulacro, lo que significa que es falso y debe configurarse para todos los métodos que necesite. Add no es una excepción, por lo que debe configurarse para hacer lo que necesita, de lo contrario no hace nada.

Agregue algo como lo siguiente y cuando el myDbSet.Add("d"); se llama, luego se agrega la ''d'' a la lista y se puede devolver más tarde.

dbSet.Setup(d => d.Add(It.IsAny<T>())).Callback<T>((s) => sourceList.Add(s));

Código completo

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()); dbSet.Setup(d => d.Add(It.IsAny<T>())).Callback<T>((s) => sourceList.Add(s)); return dbSet.Object; }

Salida

hello debug preCount = 3 postCount = 4

Estoy tratando de configurar un DbSet simulado para propósitos de prueba. Utilicé el tutorial aquí, http://www.loganfranken.com/blog/517/mocking-dbset-queries-in-ef6/ y lo modifiqué ligeramente, de modo que llamar a GetEnumerator devuelve un nuevo enumerador cada vez (otro problema que estaba teniendo) . Sin embargo, estoy teniendo dificultades para agregar elementos al DbSet.

La salida es preCount = 3 postCount = 3. Sin embargo, espero que sea precount = 3 postCount = 4. Cualquier ayuda es muy apreciada.

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; }