【发布时间】:2016-03-19 18:10:53
【问题描述】:
我正在尝试模拟通用存储库的 dbset 的 where 子句,但不知道为什么会出现 System.NotSupported 异常。 我对嘲笑很陌生,所以我不知道为什么会这样。
private List<StubEntity> _data;
private Repository<StubEntity> _repository;
[TestInitialize]
public void TestInitialize()
{
_data = new List<StubEntity>
{
new StubEntity {Id = 1, Name = "Entity 1"},
...
};
var queryableData = _data.AsQueryable();
var mockDbSet = new Mock<DbSet<StubEntity>>();
mockDbSet
.Setup(m => m.Where(It.IsAny<Expression<Func<StubEntity, bool>>>()))
.Returns<Expression<Func<StubEntity, bool>>>(p => queryableData.Where(p));
var context = new Mock<StubContext>();
context.Setup(x => x.DbEntities).Returns(mockDbSet.Object);
context.Setup(x => x.Set<StubEntity>()).Returns(mockDbSet.Object);
_repository = new Repository<StubEntity>(context.Object);
}
我只是在测试中测试 where 子句
[TestMethod]
public void Find_ReturnsProperEntity()
{
var entity = _repository.Find(s => s.Id == 1);
....
}
其中 Find 方法只是调用上下文的 where 子句。
public IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> predicate)
{
return Context.Set<TEntity>().Where(predicate);
}
【问题讨论】:
-
你看到这个答案了吗? stackoverflow.com/questions/25960192/…
标签: c# unit-testing mocking