Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型-如何将lambda表达式传递到方法中?_C#_Linq_Unit Testing_Generics_Moq - Fatal编程技术网

C# 泛型-如何将lambda表达式传递到方法中?

C# 泛型-如何将lambda表达式传递到方法中?,c#,linq,unit-testing,generics,moq,C#,Linq,Unit Testing,Generics,Moq,我有许多业务服务类,我正在为它们设置单元测试 在模拟数据时,我得到了一组相当通用的方法。一个提供模拟的数据库集,一个提供服务 有一件事我还没有做到通用化,那就是模拟数据上下文的过程 现在我有一些类似于: mockDbSet = MyHelper.GetMockedDbSet(myData); // myData is an IQueryable List <T> mockContext = new Mock<MyDataContext>(); // A handful o

我有许多业务服务类,我正在为它们设置单元测试

在模拟数据时,我得到了一组相当通用的方法。一个提供模拟的数据库集,一个提供服务

有一件事我还没有做到通用化,那就是模拟数据上下文的过程

现在我有一些类似于:

mockDbSet = MyHelper.GetMockedDbSet(myData); // myData is an IQueryable List <T>
mockContext = new Mock<MyDataContext>();
// A handful of general .Setup lines snipped here
mockContext.Setup(m => m.Person).Returns(mockDbSet.Object);
被其他实体所取代

所有实体共享相同的基类

我想要的是这样的东西:

mockContext = MyHelper.GetMockedDbContext(m => m.Person);
并且能够将所有这些通用代码放入helper类中

不过,我不知道如何实现
getmockedbcontext

以下是到目前为止我得到的信息:

public static Mock<MyDataContext> GetMockedDbContext(Func<MyDataContext, object> func)
{
    var context = new Mock<MyDataContext>();

    // Now what?

    return context;
}
public static Mock GetMockedDbContext(Func Func)
{
var context=newmock();
//现在怎么办?
返回上下文;
}
更新:以下是我到目前为止所做的工作。类似的内容被发布为答案,然后被删除。它似乎起作用了

public static Mock<MyDataContext> GetMockedDbContext<TResult>(Expression<Func<MyDataContext, TResult>> func, TResult result)
{
    var context = new Mock<MyDataContext>();
    // Snipped out stuff
    context.Setup(func).Returns(result);
    return context;
}
public static Mock GetMockedDbContext(Expression func,TResult result)
{
var context=newmock();
//剪下东西
context.Setup(func).Returns(result);
返回上下文;
}

您的方法参数的类型应与
设置
方法参数的类型相同,这意味着您的方法也必须是通用的:

public static Mock<MyDataContext> GetMockedDbContext<T>(Expression<Func<MyDataContext, T>> func)
{
    var context = new Mock<MyDataContext>();

    // Now what?
    context.Setup(func).Returns(mockDbSet.Object);

    return context;
}
public static Mock GetMockedDbContext(Expression func)
{
var context=newmock();
//现在怎么办?
context.Setup(func).Returns(mockDbSet.Object);
返回上下文;
}

如何定义
Mock
上的
Setup
方法?公共ISetup Setup(Expression Expression)是的:-只需将
表达式
中的内容复制到您的
GetMockDbContext
中就可以了。这与我上面发布的内容非常类似,因此我将其标记为答案。我在上面原始问题中更新的代码在dbSet对象中传递。
public static Mock<MyDataContext> GetMockedDbContext<T>(Expression<Func<MyDataContext, T>> func)
{
    var context = new Mock<MyDataContext>();

    // Now what?
    context.Setup(func).Returns(mockDbSet.Object);

    return context;
}