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 받고 있어요 -이
가 훨씬 간단 버전은 잘 작동 (<Func<TEnterpriseObject,bool>>
와 <Func<TEnterpriseObject,int,bool>>
사이의 혼란) 사용에서 infered 할 수 없다고 ...
mockGet.Setup(mock => mock.Get(It.IsAny<Expression<Func<TEntity, bool>>>())).Returns(
(Expression<Func<TEntity, bool>> expression) => fakeList.AsQueryable().Where(expression));
그래서 내가 무엇을 놓치고 있는지 잘 모르겠습니다 ... 아이디어입니까?