3
一次性把我的头放在了人群中:任何人都知道如何成功设置一个Mole(或任何其他单元测试工作)来加入Linq?Linq的痣加入
具体来说,这个特定的项目是使用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();
}
}
我觉得它的代码非常优雅,它在系统测试中运行得非常漂亮。但我无法弄清楚如何进行单元测试。我有一个莫尔斯的老用户设置弯路。对于单个表的查询,我可以简单地把一个痣
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 */
你能在新的答案中回答你的问题吗?这将从未答复的列表中删除此问题,并帮助其他人快速找到答案。 – Polity 2012-02-23 02:14:39
好点,现在就这样做。 – sfuqua 2012-02-23 18:46:59