2 回答

TA貢獻1111條經(jīng)驗 獲得超0個贊
根據(jù)@JLe 和@Chetan 對這個問題的評論,我不得不模擬 DbContext。我按照這篇文章來模擬 DbContext。
使用 Moq 模擬 DbContext
這是代碼的樣子。
private void Setup()
{
List<Entity> entityData = new List<Entity>();
entityData.Add(new Entity
{
Id = Guid.NewGuid()
});
DbSet<Entity> MockEntitySet = GetSet(entityData);
MockContext = new Mock<IDbContext>();
MockContext.Setup(m => m.Set<Entity>()).Returns(MockEntitySet);
}
public static DbSet<T> GetSet<T>(List<T> sourceList) where T : class
{
return GetSet(sourceList.ToArray());
}
public static DbSet<T> GetSet<T>(T[] sourceList) where T : class
{
var name = typeof(T).Name;
var queryable = sourceList.AsQueryable();
Mock<DbSet<T>> 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(m => m.AsNoTracking()).Returns(dbSet.Object);
return dbSet.Object;
}
[TestMethod]
public void Test()
{
EntityService service = new EntityService(MockContext.Object);
ComponentToTest compObj = new ComponentToTest(service);
compObj.MethodToTest(...);
// Assertions
}
感謝你們!感謝您的幫助和建議。

TA貢獻1827條經(jīng)驗 獲得超4個贊
要模擬你需要一個接口,如果沒有,你需要將要模擬的方法標記為虛擬。
在幕后,模擬框架將為您創(chuàng)建一個新的實現(xiàn),其行為與您配置模擬一樣。
希望能幫助到你。
- 2 回答
- 0 關(guān)注
- 247 瀏覽
添加回答
舉報