gpt4 book ai didi

c# - Linq Join 的摩尔

转载 作者:行者123 更新时间:2023-11-30 18:39:44 25 4
gpt4 key购买 nike

这一次让我绞尽脑汁 - 一次把它交给人群:任何人都知道如何成功地为 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 = ...

对于多个表,我发现我还需要创建一个 stub IQueryProvider,并且我需要 stub 出 CreateQuery 方法。但即使这样做,我也会收到一条错误消息,指出 CreateExpression 未 stub 。我试过了

  • 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 */

最佳答案

这是解决方案:MTable can be instantiated .这有很大帮助。我需要为我的每种类型设置两种不同方法的 stub 。以下代码完美运行:

// Note: typeAList = List<TypeA> with values populated in the test itself

System.Data.Linq.Moles.MTable<TypeA> typeATable = new System.Data.Linq.Moles.MTable<TypeA>();
typeATable.Bind(typeAList);
typeATable.ProviderSystemLinqIQueryableget = () => typeAList.AsQueryable().Provider;
typeATable.ExpressionSystemLinqIQueryableget = () => typeAList.AsQueryable().Expression;
MyLibrary.Data.Moles.MMyDataContext.AllInstances.TypeAsGet = (c) => { return typeATable; };

System.Data.Linq.Moles.MTable<TypeB> typeBTable = new System.Data.Linq.Moles.MTable<TypeB>();
typeBTable.Bind(typeBList);
typeBTable.ProviderSystemLinqIQueryableget = () => typeBList.AsQueryable().Provider;
typeBTable.ExpressionSystemLinqIQueryableget = () => typeBList.AsQueryable().Expression;
MyLibrary.Data.Moles.MMyDataContext.AllInstances.TypeBsGet = (c) => { return typeBTable; };

关于c# - Linq Join 的摩尔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com