我正在使用
我正在将它用作扩展方法,例如:
.NET4.5
,EF6
和Moq
进行单元测试。我试图模拟一些数据库数据以进行测试。我有一个示例,如何通过声明mockset作为变量然后使用mocks来实现这一点。public static class TestExtensionMethods
{
public static DbSet<T> AsDbSet<T>(this 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>(sourceList.Add);
return dbSet.Object;
}
}
我正在将它用作扩展方法,例如:
mockedDbContext.Journey = new List<Journey> { }.AsDbSet();
是否有一种方法可以将其声明为单行代码(这样我就可以将db集合作为TestCaseData
传递,而无需编写扩展方法)。我尝试了以下方法。var mockedDbContext = new Mock<OnlineLegal>();
mockedDbContext.Setup(o => o.Journey).Returns(() => (DbSet<Journey>)(new List<Journey> { new Journey { SessionId = sessionId, ConveyancingAnswer = new Collection<ConveyancingAnswer>()} }.AsEnumerable()));
但它会出现错误:System.InvalidCastException : 无法将类型为 'System.Collections.Generic.List1[Saga.Services.Legal.Website.Journey]' 的对象强制转换为类型 'System.Data.Entity.DbSet1[Saga.Services.Legal.Website.Journey]'。
如何内联模拟 DbSet<T>
?
编辑:关于重复,标记我的问题的人没有花费精力阅读比标题更多的内容,他们今年会从圣诞老人那里得到沙林毒气。