我正在使用一个moq-ed“Get Service”中的表达式,并且遇到了一个令人讨厌的问题。为了让这个测试正确运行,获取服务返回它应该的内容,中间有一位翻译人员需要您提供的内容,发送它并获取您真正想要的内容。所以,认为这很容易,我尝试了这个...... fakelist是TEntity对象(翻译,由UI使用),TEnterpriseObject是实际的持久性。Moq,一位翻译和一个表达
mockGet.Setup(mock => mock.Get(It.IsAny<Expression<Func<TEnterpriseObject, bool>>>())).Returns(
(Expression<Func<TEnterpriseObject, bool>> expression) =>
{
var items = new List<TEnterpriseObject>();
var translator = (IEntityTranslator<TEntity, TEnterpriseObject>) ObjectFactory.GetInstance(typeof (IEntityTranslator<TEntity, TEnterpriseObject>));
fakeList.ForEach(fake => items.Add(translator.ToEnterpriseObject(fake)));
items = items.Where(expression);
var result = new List<TEnterpriseObject>(items);
fakeList.Clear();
result.ForEach(item => translator.ToEntity(item));
return items;
});
我越来越有下items.where(表达)红色squigglie - 说,它不能从使用infered(<Func<TEnterpriseObject,bool>>
和<Func<TEnterpriseObject,int,bool>>
之间的混淆)
一个简单得多的版本的伟大工程...
mockGet.Setup(mock => mock.Get(It.IsAny<Expression<Func<TEntity, bool>>>())).Returns(
(Expression<Func<TEntity, bool>> expression) => fakeList.AsQueryable().Where(expression));
所以我不知道我错过了什么......想法?