C# 莫克,翻译与表达

C# 莫克,翻译与表达,c#,asp.net,generics,moq,C#,Asp.net,Generics,Moq,我正在使用moq ed中的一个表达式“获取服务”,遇到了一个相当恼人的问题。为了让这个测试正确运行,让get服务返回它应该返回的内容,中间有一个翻译器,它接收您请求的内容,发送它,并获取您真正想要的内容。所以,认为这很容易,我尝试了这个。。。fakelist是TEntity对象(已翻译,由UI使用),TEnterpriseObject是实际的持久性 mockGet.Setup(mock => mock.Get(It.IsAny<Expression<Func<TEnter

我正在使用moq ed中的一个表达式“获取服务”,遇到了一个相当恼人的问题。为了让这个测试正确运行,让get服务返回它应该返回的内容,中间有一个翻译器,它接收您请求的内容,发送它,并获取您真正想要的内容。所以,认为这很容易,我尝试了这个。。。fakelist是TEntity对象(已翻译,由UI使用),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;
        });
mockGet.Setup(mock=>mock.Get(It.IsAny())。返回(
(表达式)=>
{
var items=新列表();
var translator=(IEntityTranslator)ObjectFactory.GetInstance(typeof(IEntityTranslator));
fakeList.ForEach(fake=>items.Add(translator.ToEnterpriseObject(fake));
项目=项目。其中(表达式);
var结果=新列表(项目);
fakeList.Clear();
result.ForEach(item=>translator.ToEntity(item));
退货项目;
});
我在这些项下得到了红色的曲线。其中(表达式)——表示无法从用法推断(混淆了

一个简单得多的版本非常有用

mockGet.Setup(mock => mock.Get(It.IsAny<Expression<Func<TEntity, bool>>>())).Returns(
            (Expression<Func<TEntity, bool>> expression) => fakeList.AsQueryable().Where(expression));
mockGet.Setup(mock=>mock.Get(It.IsAny())。返回(
(表达式)=>fakeList.AsQueryable(),其中(表达式));
所以我不确定我错过了什么。。。想法?

“表达”是一种表达,而不是一种功能。。。这是两件不同的事情。如果你使用
expression.Compile()
,我相信它会给你一个Func(我只是想把这个写下来,所以如果我错了,请告诉我)。

这是一件愚蠢的事情--.AsQueryable()是结果。。。这就是为什么它抱怨说它不知道我想要什么样的地方(?)

mockGet.Setup(mock=>mock.Get(It.IsAny())。返回(
(表达式)=>
{
var items=新列表();
变量转换器=
(IEntityTranslator)
GetInstance(typeof(IEntityTranslator));
fakeList.ForEach(fake=>items.Add(translator.ToEnterpriseObject(fake));
var filtered=items.AsQueryable()。其中(表达式);
var results=新列表();
filtered.ToList().ForEach(item=>results.Add(translator.ToEntity(item));
返回结果。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();
                });