LINQ進行查詢簡單介紹
學習.NET Framework 3.5時,經常會遇到LINQ進行查詢問題,這里將介紹LINQ進行查詢問題的解決方法。
.NET Framework 3.5中引入了一個新特性LINQ(集成語言查詢),據說.NET Framework 3.5中很多特性都是為LINQ而服務的,例如Lambda表達式的支持,匿名類型,等等……這篇文章會講述一個把Linq to Object應用于測試的例子。
前一陣子需要測試一個搜索在線會員的功能,如果一個用戶是在線的,那么他所能夠被搜索到的信息都會作為一條記錄,保存在一個表中,主要的字段有5 個,也就是根據這5個字段的信息可以查詢出用戶想要的在線會員。一個簡單的方案就是寫一個比較復雜的存儲過程,然后根據5個輸入來查詢出不同的結果,不過 DBA說在SQL SERVER中進行邏輯運算的性能不是很好,所以開發人員寫了12條存儲過程,分別對應不同的組合,那么對于我做集成測試來說,我起碼要有12個測試方法對應這12條存儲過程。同時我還要設計一定數量的測試數據,供我查詢測試,而比較要命的是,這些測試數據隨著我對這個功能的理解的深入,在不斷地增加,結果就是如果我寫第一個測試的時候,我準備的數據是30條,OK,測試通過; 等我寫到第五個測試的時候,測試數據可能有40條了,當我用這40條測試數據重新指向第一個測試的時候,FAILED!!!這讓人非常郁悶。所以我想到了能不能用round trip的方法來進行測試。做一個比喻,假如說我想證明WIN7的計算器程序是正確的,那么可以把相同的計算在WIN XP的計算器中跑一遍,如果兩者結果一樣,那么我可以認為WIN7的計算器程序也是正確的(如果XP的計算器有錯怎么辦?先別較真,有風險,但很小)。
我的做法就是,準備一些數據,首先用SUT進行查詢,然后用LINQ進行查詢,如果兩者查詢結果一致,那么可以認為程序是正確的,否則就是兩者之一存在問題。
首先準備一些測試數據,保存為XML文件,第一方便對測試數據進行CRUD,第二可以用XmlSerializer把這些數據轉換為對象,方便用LINQ進行查詢。
- < ?xml version="1.0" encoding="utf-8" ?>
- <onlinefriends>
- <friends>
- <onlinefrienddata>
- <friendid>1300010000friendid>
- <province>北京市province>
- <city>北京市city>
- <age>18age>
- <gender>2gender>
- <hasphoto>truehasphoto>
- onlinefrienddata>
- <onlinefrienddata>
- <friendid>1300010002friendid>
- <province>北京市province>
- <city>北京市city>
- <age>27age>
- <gender>2gender>
- <hasphoto>falsehasphoto>
- onlinefrienddata>
- <onlinefrienddata>
- <friendid>1300010004friendid>
- <province>廣東省province>
- <city>廣州市city>
- <age>45age>
- <gender>1gender>
- <hasphoto>truehasphoto>
- onlinefrienddata>
- friends>
- onlinefriends>
【編輯推薦】