【发布时间】:2012-02-11 23:35:16
【问题描述】:
在这个问题上我一直很头疼 - 是时候把它交给人群了:有人知道如何为 Linq 中的 Join 成功设置 Mole(或任何其他单元测试工作)吗?
具体来说,这个特定的项目正在使用 Linq to Sql。事实上,这是我第一次使用 Linq to Sql,我试图展示有效且正确的单元测试。我有一个方法可以拉出通过外键链接的 TableA 和 TableB,以创建基本上以 TableA 为模型的数据传输对象。代码不准确,因为我不得不把它留在工作中。
public List<TableADto> GetTableA()
{
using (MyDataContext context = new MyDataContext)
{
var query = from a in context.a
join b in context.b on a.ForeignId equals b.ForeignId
select MyBuilderClass.CreateTableADto(a, b);
return query.ToList();
}
}
我发现代码的方式非常优雅,并且在系统测试中运行良好。但我不知道如何对其进行单元测试。我有一个 Moles 的资深用户来设置弯路。对于来自单个表的查询,我可以简单地在
上放置一个痣System.Linq.Data.Moles.MTable<TableA>.AllInstances.GetEnumerator = ...
对于多个表,我发现我还需要创建一个存根 IQueryProvider,并且我需要存根出 CreateQuery 方法。但即使这样做,我也会收到一条错误消息,指出 CreateExpression 没有被存根。我试过了
MTable<TableA>.AllInstances.CreateQueryExpression = (Expression e) => { return listA.AsQueryable().Provider; }MTable<TableA>.AllInstances.CreateQueryExpression01(Expression e => listA.AsQueryable().Provider; }MTable<TableA>.AllInstances.CreateQueryExpression<TableB> = (Expresion e) => { return listB.AsQueryable().Provider; }// MTable<TableA>.AllInstances.CreateQueryExpression<Tablea> = (Expresion e) => { return listA.AsQueryable().Provider; } /* REDUNDANT WITH THE FIRST ONE */
【问题讨论】:
-
您能在新答案中回答您的问题吗?这将从未回答列表中删除此问题,并帮助其他人快速找到答案。
标签: c# unit-testing linq-to-sql moles