Je développe un projet de test avec NUnit, Moq, C# et .NET Framework 4.7.Utilisation de génériques dans l'expression lambda ou comment accéder à un dbset avec des génériques
J'ai ces deux méthodes qui sont presque égale:
using Microsoft.EntityFrameworkCore;
using Moq;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
private void MockProducts(Mock<TRZFDbContext> mockContext, List<Product> data)
{
IQueryable<Product> queryable = data.AsQueryable();
var mockSet = new Mock<DbSet<Product>>();
mockSet.As<IQueryable<Product>>().Setup(m => m.Provider).Returns(queryable.Provider);
mockSet.As<IQueryable<Product>>().Setup(m => m.Expression).Returns(queryable.Expression);
mockSet.As<IQueryable<Product>>().Setup(m => m.ElementType).Returns(queryable.ElementType);
mockSet.As<IQueryable<Product>>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator());
mockSet.Setup(d => d.Add(It.IsAny<Product>())).Callback<Product>((s) => data.Add(s));
mockSet.Setup(d => d.Remove(It.IsAny<Product>())).Callback<Product>((s) => data.Remove(s));
mockContext.Setup(m => m.Product).Returns(mockSet.Object);
}
private void MockEmvoProducts(Mock<TRZFDbContext> mockContext, List<EmvoProduct> data)
{
IQueryable<EmvoProduct> queryable = data.AsQueryable();
var mockSet = new Mock<DbSet<EmvoProduct>>();
mockSet.As<IQueryable<EmvoProduct>>().Setup(m => m.Provider).Returns(queryable.Provider);
mockSet.As<IQueryable<EmvoProduct>>().Setup(m => m.Expression).Returns(queryable.Expression);
mockSet.As<IQueryable<EmvoProduct>>().Setup(m => m.ElementType).Returns(queryable.ElementType);
mockSet.As<IQueryable<EmvoProduct>>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator());
mockSet.Setup(d => d.Add(It.IsAny<EmvoProduct>())).Callback<EmvoProduct>((s) => data.Add(s));
mockSet.Setup(d => d.Remove(It.IsAny<EmvoProduct>())).Callback<EmvoProduct>((s) => data.Remove(s));
mockContext.Setup(m => m.EmvoProduct).Returns(mockSet.Object);
}
je peux créer une méthode de génériques changer le deuxième argument data
avec un générique. Mais mon problème est sur la dernière phrase:
mockContext.Setup(m => m.Product).Returns(mockSet.Object);
et
mockContext.Setup(m => m.EmvoProduct).Returns(mockSet.Object);
m.Product
est un DbSet de Product
et m.EmvoProduct
est un DbSet de EmvoProduct
.
Existe-t-il un moyen de faire en sorte que l'expression lambda utilise les génériques? Ou peut-être existe-t-il d'autres approches.
fondamentalement vous voulez créer la fonction de configuration? –
Oui. Mais la question est de savoir comment en faire des génériques. Peut-être que je dois déplacer la dernière phrase à l'extérieur comme ils l'ont fait ici: https://www.rhyous.com/2015/04/10/how-to-mock-an-entity-framework-dbcontext-and-its-dbset- propriétés/ – VansFannel
quel numéro de ligne dans le lien? –