正文

供求信息網(wǎng)(15)

ASP.NET項(xiàng)目開發(fā)案例全程實(shí)錄(第2版) 作者:明日科技


1.5.3 網(wǎng)站主頁(yè)實(shí)現(xiàn)過(guò)程

本模塊使用的數(shù)據(jù)表:tb_LeaguerInfo。

1.設(shè)計(jì)步驟

(1)在網(wǎng)站的根目錄下新建一個(gè)Web窗體,默認(rèn)名稱為Default.aspx,并且將其作為MasterPage.master母版頁(yè)的內(nèi)容頁(yè),該過(guò)程已經(jīng)在1.5.2節(jié)中詳細(xì)講解,Default.aspx主要用于網(wǎng)站的主頁(yè)。

(2)在Web窗體的Content區(qū)域添加一個(gè)Table表格,用于頁(yè)面的布局。

(3)在Web窗體Content區(qū)域的Table中添加6個(gè)DataList數(shù)據(jù)服務(wù)器控件,主要用于顯示各種類型的部分供求信息。

(4)在添加的6個(gè)DataList數(shù)據(jù)服務(wù)器控件中分別添加一個(gè)Table,用于DataList控件的布局,并綁定相應(yīng)的數(shù)據(jù)。在ASPX頁(yè)中實(shí)現(xiàn)綁定代碼如下:

<ItemTemplate>

<table align="center" cellpadding="0" cellspacing="0" width="266">

<tr>

<td>

<span class="hong" style="color: #000000">·<a class="huise" href="ShowLeaguerInfo.aspx?id=<%#DataBinder.Eval(Container.DataItem,"id") %>" target="_blank"><%#DataBinder.Eval(Container.DataItem,"title") %></a></span></td>

</tr>

<tr style="color: #000000">

<td>

<img height="1" src="images/line.gif" width="266" /></td>

</tr>

</table>

</ItemTemplate>

2.實(shí)現(xiàn)代碼

在主頁(yè)Web窗體的加載事件中將各種類型的部分供求信息綁定到DataList控件。實(shí)現(xiàn)代碼如下:

例程18 代碼位置:光盤\TM\01\SIS\ Default.aspx.cs

Operation operation = new Operation(); //聲明網(wǎng)站業(yè)務(wù)類對(duì)象

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack) //!IsPostBack避免重復(fù)刷新加載頁(yè)面

{

//獲取前6條分類供求信息

dlZP.DataSource = operation.SelectLeaguerInfo(true, "招聘信息", 6);

dlZP.DataBind();

dlPX.DataSource = operation.SelectLeaguerInfo(true, "培訓(xùn)信息", 6);

dlPX.DataBind();

dlGY.DataSource = operation.SelectLeaguerInfo(true, "公寓信息", 6);

dlGY.DataBind();

dlJJ.DataSource = operation.SelectLeaguerInfo(true, "家教信息", 6);

dlJJ.DataBind();

dlWPQG.DataSource = operation.SelectLeaguerInfo(true, "物品求購(gòu)", 6);

dlWPQG.DataBind();

dlWPCS.DataSource = operation.SelectLeaguerInfo(true, "物品出售", 6);

dlWPCS.DataBind();

dlQDCD.DataSource = operation.SelectLeaguerInfo(true, "求兌出兌", 6);

dlQDCD.DataBind();

dlCL.DataSource = operation.SelectLeaguerInfo(true, "車輛信息", 6);

dlCL.DataBind();

}

}

代碼貼士

Page.IsPostBack屬性:獲取一個(gè)值,該值指示該頁(yè)是否正為響應(yīng)客戶端回發(fā)而加載,或者它是否正被首次加載和訪問(wèn)。如果是為響應(yīng)客戶端回發(fā)而加載該頁(yè),則為True;否則為False。

SelectLeaguerInfo()方法:自定義業(yè)務(wù)層類中方法,用于查詢同類型收費(fèi)到期和未到期供求信息(前n條信息),True顯示過(guò)期信息,F(xiàn)alse顯示未過(guò)期信息。

1.5.4 單元測(cè)試

在現(xiàn)代軟件開發(fā)過(guò)程中,測(cè)試不再作為一個(gè)獨(dú)立的生命周期。單元測(cè)試成為與編寫代碼同步進(jìn)行的開發(fā)活動(dòng)。單元測(cè)試能夠提高程序員對(duì)程序的信心,保證程序的質(zhì)量,加快軟件開發(fā)速度,使程序易于維護(hù)。

1.單元測(cè)試概述

單元測(cè)試是要在軟件開發(fā)過(guò)程中進(jìn)行的最低級(jí)別的測(cè)試活動(dòng)。在單元測(cè)試活動(dòng)中,軟件的獨(dú)立單元將在與程序的其他部分相隔離的情況下進(jìn)行測(cè)試。

在一種傳統(tǒng)的結(jié)構(gòu)化編程語(yǔ)言,如C語(yǔ)言中,要進(jìn)行測(cè)試的單元一般是函數(shù)或子過(guò)程。在像C++這樣的面向?qū)ο蟮恼Z(yǔ)言中,要進(jìn)行測(cè)試的基本單元是類。單元測(cè)試不僅僅是作為無(wú)錯(cuò)編碼的一種輔助手段在一次性開發(fā)過(guò)程中使用,單元測(cè)試必須是可重復(fù)的,無(wú)論是在軟件修改,或是移植到新的運(yùn)行環(huán)境的過(guò)程中。因此,所有的測(cè)試都必須在整個(gè)軟件系統(tǒng)的生命周期中進(jìn)行維護(hù)。

經(jīng)常與單元測(cè)試聯(lián)系起來(lái)的另外一些開發(fā)活動(dòng)包括代碼走讀(Code Review)、靜態(tài)分析(Static Analysis)和動(dòng)態(tài)分析(Dynamic Analysis)。靜態(tài)分析就是對(duì)軟件的源代碼進(jìn)行研讀,查找錯(cuò)誤或收集一些度量數(shù)據(jù),并不需要對(duì)代碼進(jìn)行編譯和執(zhí)行。動(dòng)態(tài)分析就是通過(guò)觀察軟件運(yùn)行時(shí)的動(dòng)作,來(lái)提供執(zhí)行跟蹤、時(shí)間分析以及測(cè)試覆蓋度方面的信息。

2.單元測(cè)試的優(yōu)點(diǎn)

一種驗(yàn)證行為。

程序中的每一項(xiàng)功能都是通過(guò)測(cè)試來(lái)驗(yàn)證它的正確性。單元測(cè)試為以后的開發(fā)提供支援,就算是開發(fā)后期,也可以輕松地增加功能或更改程序結(jié)構(gòu),而不用擔(dān)心這個(gè)過(guò)程會(huì)破壞重要的東西,而且它為代碼的重構(gòu)提供了保障。這樣,我們就可以更自由地對(duì)程序進(jìn)行改進(jìn)。

一種設(shè)計(jì)行為。

編寫單元測(cè)試將使我們從調(diào)用者的角度觀察、思考。特別是先寫測(cè)試(test-first),迫使我們把程序設(shè)計(jì)成易于調(diào)用和可測(cè)試的,即解除軟件中的耦合。

一種編寫文檔的行為。

單元測(cè)試是一種無(wú)價(jià)的文檔,它是展示函數(shù)或類如何使用的最佳文檔。這份文檔是可編譯、可運(yùn)行的,并且它保持最新,永遠(yuǎn)與代碼同步。

具有回歸性。

自動(dòng)化的單元測(cè)試避免了代碼出現(xiàn)回歸,編寫完成之后,可以隨時(shí)隨地地快速運(yùn)行測(cè)試。

3.越到項(xiàng)目后期,單元測(cè)試為何越難進(jìn)行

在很多項(xiàng)目的初期,項(xiàng)目中的大部分程序員都能夠自覺(jué)地去編寫單元測(cè)試。隨著項(xiàng)目的進(jìn)行、任務(wù)的加重、離交付時(shí)間越來(lái)越近,不能按時(shí)完成項(xiàng)目的風(fēng)險(xiǎn)越來(lái)越大,單元測(cè)試就往往成為犧牲品。項(xiàng)目經(jīng)理因?yàn)檫M(jìn)度的壓力也不重視了,程序員也因?yàn)榫幋a的壓力和無(wú)人看管而不再為代碼編寫單元測(cè)試了。筆者親身經(jīng)歷的項(xiàng)目都或多或少地發(fā)生過(guò)類似的事情。越是在項(xiàng)目的后期,能堅(jiān)持編寫單元測(cè)試的程序在整個(gè)項(xiàng)目組中所占的項(xiàng)目比例越低。

為了追趕項(xiàng)目進(jìn)度,多數(shù)程序員將沒(méi)有經(jīng)過(guò)任何測(cè)試的程序代碼上傳到版本控制系統(tǒng),項(xiàng)目經(jīng)理也不再追問(wèn),照單全收。這樣做的結(jié)果就是在項(xiàng)目后期,技術(shù)骨干人員只好加班加點(diǎn)進(jìn)行系統(tǒng)集成。集成完之后,下發(fā)給測(cè)試人員測(cè)試時(shí),Bug的報(bào)告數(shù)量翻倍增長(zhǎng)。程序員開始修改Bug,但還有非常多的Bug隱藏得很深,一直潛伏到生產(chǎn)環(huán)境中。

總之,在現(xiàn)代軟件開發(fā)過(guò)程中,測(cè)試不再作為一個(gè)獨(dú)立的生命周期,單元測(cè)試成為與編寫代碼同步進(jìn)行的開發(fā)活動(dòng)。單元測(cè)試能夠提高程序員對(duì)程序的信心、保證程序的質(zhì)量、加快軟件開發(fā)速度,并使程序易于維護(hù)。沒(méi)有單元測(cè)試是絕對(duì)不行的。

4.NUnit單元測(cè)試工具的介紹與使用

(1)NUnit使用前介紹

NUnit是一個(gè)單元測(cè)試框架,是專門針對(duì)測(cè)試.NET開發(fā)的程序,同類產(chǎn)品還包括JUnit(Java)、CPPUnit(C++),都屬于xUnit中的成員。NUnit是xUnit家族中的第4個(gè)主打產(chǎn)品,完全由C#語(yǔ)言來(lái)編寫,目前NUnit的最新版本是NUnit 2.4.3,可以到https://www.nunit.org/網(wǎng)站下載。

下面正式講解Nunit。在講解之前先來(lái)看一下單元測(cè)試的運(yùn)行效果,如圖1.28和圖1.29所示。


上一章目錄下一章

Copyright ? 讀書網(wǎng) www.talentonion.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)