我的一个基础存储库类包含一个方法:
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/