首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
單元測試應該測什么,不應該測什么?
這段代碼描述電信營業系統中的繳費開機的過程:
User user = User.getUserByServiceId("13309790280");//通過電話號碼找到用戶
Account account = user.getAccount();//與用戶關聯的帳戶
user.pay(100);//用戶繳費100元
//判斷用戶余額+帳戶的信用度-用戶欠費是否大于0
if (user.getBalance() + account.getCredit() - user.getDebt() > 0)
{
Service service = user.getService();//與用戶相關的服務
//判斷這個服務是否處于欠費停機狀態
if (service.getState() == "欠費停機" || service.getState() == "限制呼出")
{
…//向交換系統發出開機指令
}
}
這是電信營業系統中最常見的的一個業務。電信系統最基礎的模型應該說是"三戶模型",三戶模型描述的是客戶(Customer)、帳戶(Account)、用戶(User)以及服務(Service)等等概念的一個關系模型。實際的模型比代碼里的復雜,這里簡化了很多,主要用來舉個例子。
要開發一個電信系統,首先要做的就是在系統中實現最基礎的幾個模型,比如三戶模型、聯機指令模型、業務辦理模型、合作伙伴模型……,其中三戶模型處于非常重要的地位。首先要做的是在軟件系統中真實的反映這個模型,絕不可以將其隱含擴散在各個業務過程中。然后就可以在這個基礎上,從一到二、從二到三、從三到萬,實現各個子系統和復雜多變的業務需求。
按照TDD的開發思路,我們應該先寫測試代碼,再來寫實際程序,用測試來推動開發的前進。這里先把代碼寫出來,表達一下業務。下面我就說一下,單元測試代碼應該測什么。
我們拿User舉個例子,現在我們要寫User類的測試代碼。
需要測什么?
我們需要測試User類的外在表現。比如我們要測試pay方法,應該這樣:
我們建立一個User對象,這個User余額是0,欠費38元。現在繳費100元,繳費完成后,余額應該是62元,欠費應該為0,這是一個Case。
我們建立一個User對象,這個User余額是30,欠費0。現在繳費50元,繳費完成后,欠費應該仍然是0,余額應該是80元。這是第二個Case。
我們建立一個User對象,這個User的余額是0,欠費150元。現在繳費70元,繳費完成后,欠費應該是80元,余額應該是0。這是第三個Case。
我們應該測試的是User類的外在表現,而不應該過問他如何實現。
在測試的時候,我們需要一個可以重復的穩定的環境(真實環境往往不行),有時候無法直接建立 User對象(比如User對象要依賴一個數據集),有時候真實的環境很難實現一些測試條件(比如邊界值、非正常值)。這時候,我們就可以使用Mock、 Stub這樣的方法,把User建立起來,也把環境建立起來,然后測試User的表現。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |