Moq, переводчик и выражение - PullRequest
1 голос
/ 14 апреля 2010

Я работаю с выражением в разделе «Получить сервис» и столкнулся с довольно раздражающей проблемой. Чтобы этот тест работал правильно и служба get возвращала то, что должна, между ними есть переводчик, который берет то, что вы просили, отсылает его и получает то, что вы действительно хотите. Итак, думая, что это было легко, я пытаюсь сделать это ... фальшивый список - это объекты TEntity (переведенные, используемые пользовательским интерфейсом), а TEnterpriseObject - это фактическое сопротивление.

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;
        });

Я получаю красный волнистый лист под этими предметами. Где (выражение) - говорит, что его нельзя использовать из-за употребления (путается между <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));

так что я не уверен, что мне не хватает ... идеи?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2010

Это было что-то глупое - .AsQueryable () - результат ... вот почему он жаловался, что не может понять, где я хотел (?)

        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)));
                    var filtered = items.AsQueryable().Where(expression);
                    var results = new List<TEntity>();
                    filtered.ToList().ForEach(item => results.Add(translator.ToEntity(item)));
                    return results.AsQueryable();
                });
0 голосов
/ 14 апреля 2010

«выражение» - это выражение, а не функция <...> ... это две разные вещи. Если вы сделаете expression.Compile(), я думаю, что это даст вам Func <> (я просто пишу это на макушке, так что дайте мне знать, если я ошибаюсь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...