LINQ進(jìn)行查詢簡單介紹
學(xué)習(xí).NET Framework 3.5時(shí),經(jīng)常會(huì)遇到LINQ進(jìn)行查詢問題,這里將介紹LINQ進(jìn)行查詢問題的解決方法。
.NET Framework 3.5中引入了一個(gè)新特性LINQ(集成語言查詢),據(jù)說.NET Framework 3.5中很多特性都是為LINQ而服務(wù)的,例如Lambda表達(dá)式的支持,匿名類型,等等……這篇文章會(huì)講述一個(gè)把Linq to Object應(yīng)用于測試的例子。
前一陣子需要測試一個(gè)搜索在線會(huì)員的功能,如果一個(gè)用戶是在線的,那么他所能夠被搜索到的信息都會(huì)作為一條記錄,保存在一個(gè)表中,主要的字段有5 個(gè),也就是根據(jù)這5個(gè)字段的信息可以查詢出用戶想要的在線會(huì)員。一個(gè)簡單的方案就是寫一個(gè)比較復(fù)雜的存儲(chǔ)過程,然后根據(jù)5個(gè)輸入來查詢出不同的結(jié)果,不過 DBA說在SQL SERVER中進(jìn)行邏輯運(yùn)算的性能不是很好,所以開發(fā)人員寫了12條存儲(chǔ)過程,分別對(duì)應(yīng)不同的組合,那么對(duì)于我做集成測試來說,我起碼要有12個(gè)測試方法對(duì)應(yīng)這12條存儲(chǔ)過程。同時(shí)我還要設(shè)計(jì)一定數(shù)量的測試數(shù)據(jù),供我查詢測試,而比較要命的是,這些測試數(shù)據(jù)隨著我對(duì)這個(gè)功能的理解的深入,在不斷地增加,結(jié)果就是如果我寫第一個(gè)測試的時(shí)候,我準(zhǔn)備的數(shù)據(jù)是30條,OK,測試通過; 等我寫到第五個(gè)測試的時(shí)候,測試數(shù)據(jù)可能有40條了,當(dāng)我用這40條測試數(shù)據(jù)重新指向第一個(gè)測試的時(shí)候,F(xiàn)AILED!!!這讓人非常郁悶。所以我想到了能不能用round trip的方法來進(jìn)行測試。做一個(gè)比喻,假如說我想證明WIN7的計(jì)算器程序是正確的,那么可以把相同的計(jì)算在WIN XP的計(jì)算器中跑一遍,如果兩者結(jié)果一樣,那么我可以認(rèn)為WIN7的計(jì)算器程序也是正確的(如果XP的計(jì)算器有錯(cuò)怎么辦?先別較真,有風(fēng)險(xiǎn),但很小)。
我的做法就是,準(zhǔn)備一些數(shù)據(jù),首先用SUT進(jìn)行查詢,然后用LINQ進(jìn)行查詢,如果兩者查詢結(jié)果一致,那么可以認(rèn)為程序是正確的,否則就是兩者之一存在問題。
首先準(zhǔn)備一些測試數(shù)據(jù),保存為XML文件,第一方便對(duì)測試數(shù)據(jù)進(jìn)行CRUD,第二可以用XmlSerializer把這些數(shù)據(jù)轉(zhuǎn)換為對(duì)象,方便用LINQ進(jìn)行查詢。
- < ?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>
【編輯推薦】