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