我正在開發一個NUnit,Moq,C#和.NET Framework 4.7的測試項目。在lambda表達式中使用泛型或如何使用泛型訪問dbset
我有這兩種方法是幾乎等於:
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);
}
我可以創建一個泛型方法改變的第二個參數data
與通用。但我的問題是最後一句:
mockContext.Setup(m => m.Product).Returns(mockSet.Object);
和
mockContext.Setup(m => m.EmvoProduct).Returns(mockSet.Object);
m.Product
是Product
一個DbSet和m.EmvoProduct
是EmvoProduct
一個DbSet。
有沒有辦法讓lambda表達式使用泛型?或者也許有另一種方法。
基本上你想創建功能設置? –
是的。但問題是如何使它成爲泛型。也許我必須像在這裏一樣將最新的句子移到外面:https://www.rhyous.com/2015/04/10/how-to-mock-an-entity-framework-dbcontext-and-its-dbset-屬性/ – VansFannel
鏈接中的哪個行號? –