.net - 如何模拟 System.Data.Linq.Table<MyClass>

标签 .net linq unit-testing mocking moq

我的一个基础存储库类包含一个方法:

public abstract class RepositoryBase<T, TDb> : IRepository<T>
    where T : IEntity
    where TDb : class, IDbEntity, new()
{
    protected internal abstract Table<TDb> GetTable();
    ...
}

我正在为包含上述方法实现的派生存储库类编写单元测试:
public class CmOptionRepository : 
    RepositoryBase<ICmOption, CMCoreDAL.DbData.CMOption>, ICmOptionRepository
{
    protected internal override System.Data.Linq.Table<CMCoreDAL.DbData.CMOption>
        GetTable()
    {
        return Context.CMOptions;
    }

....
}

这里: Context - 是 DB 的 Linq 模型,CMOptions - DB 表之一。

我希望我的“GetTable()”方法返回一组特殊的数据。

我将模拟该方法:
        System.Data.Linq.Table<CMCoreDAL.DbData.CMOption> table = ...;
        Mock<CmOptionRepository> mockRepository =
            new Mock<CmOptionRepository>(MockBehavior.Strict);
        mockRepository.Setup(mock => mock.GetTable()).Returns(table);

但不知道如何创建 System.Data.Linq.Table<CMCoreDAL.DbData.CMOption> 的实例类(class)。

问题:如何模拟 System.Data.Linq.Table<> ?或者我可能需要更改方法签名以避免 System.Data.Linq.Table<>类用法?

请指教。欢迎任何想法。

附言我正在使用起订量。

最佳答案

如果您使用的是 .NET 4.0,Table<T>实现 ITable<T>所以你应该使用接口(interface)ITable<TDb>GetTable 的返回类型中而不是具体的类型。然后你就可以 mock 了。

在 .NET 3.5 中,这有点困难,因为 Table<T>仅实现 ITable (不是通用的)。

关于.net - 如何模拟 System.Data.Linq.Table<MyClass>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248882/

相关文章:

c# - Windows 服务 : How can i create multiple windows service as a multiple exe file

c# - 用于更新集合的嵌套循环的替代方法

linq - 使用 linq toEntity 获取新添加记录的 ID

c# - 如何在泛型方法中有一个匿名返回类型?(就像 linq 中的 select 方法)

python - 在没有 manage.py 的情况下从 Django 库运行单元测试

c# - 在 System.Windows.Forms.DataGrid 中双击单元格时不会触发 MouseDoubleClick 事件

.net - Word 互操作 - 如何关闭一个 Word 窗口而不关闭所有窗口?

c# - 将文本 SQL 与 LINQ 结合使用

javascript - Karma 运行程序在 TDD 上因解析错误而退出

c# unit-test with signed-assemblies 标签: