我正在使用一個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));
所以我不知道我錯過了什麼......想法?