測試驅動開發實踐

来源:http://www.cnblogs.com/wang-ze/archive/2016/07/14/5671879.html
-Advertisement-
Play Games

總是以為自己瞭解了測試驅動開發,其實做起來和瞭解根本不是一回事。原來覺得代碼清晰得很,後來試驗了一下才知道那是自己的錯覺。這次,讓我們拋卻Eclipse的自動補全功能,來一場真正的測試驅動開發吧。 項目描述:這是一個很簡單的項目,目標是掃描磁碟上所有特定格式的文件,將其路徑存儲下來,通過程式可以快捷 ...


總是以為自己瞭解了測試驅動開發,其實做起來和瞭解根本不是一回事。原來覺得代碼清晰得很,後來試驗了一下才知道那是自己的錯覺。這次,讓我們拋卻Eclipse的自動補全功能,來一場真正的測試驅動開發吧。

項目描述:這是一個很簡單的項目,目標是掃描磁碟上所有特定格式的文件,將其路徑存儲下來,通過程式可以快捷搜索到文件路徑並自動定位到該文件。

用戶故事(簡單點寫了):

1、              掃描磁碟,將目錄下的所有文件列出來,將特定格式的文件信息存儲到磁碟。

2、              所有文件的信息可以被查詢。

3、              被查詢出的信息可以雙擊打開所在文件夾並定位該文件。

好了,這就是第一次的迭代目標,其中文件的格式枚舉,存儲到磁碟的形式,都可以以後再說,那麼針對於故事的過程,我們開始設計並寫測試吧:

設計:

1、          平面文件存儲,每個文件以行為單位存儲,不同屬性以###分割,實例化到FileInfo類(故事1)。

2、          平面文件叫fileDB。文件以行讀取到List,以帶格式的String寫入(故事1)。

3、          特定文件格式以正則表達式匹配(故事1)。

4、          查詢的條件是文件名,通過遍歷List查找屬性是否符合contains規則(故事2)。

5、          用JNI explorer打開並定位文件(故事3)。

建立測試:

這裡首先關註的是設計中的第一條。

新建一個Junit Test Case,我將測試的類叫FileInfo,所以這個測試類叫FileInfoTest,它與FileInfo在同一包路徑下,但是在不同的resource folder下。

這個Test Case應該不能通過測試。

事實證明,它的確無法通過測試

然後,它應該這樣被初始化。

編譯錯誤!那當然,因為類FileInfo還不存在,讓我們建立它。

編譯通過了,我們需要它將欄位輸出成一個帶###分隔符的字元串,字元串的組成是FileName###FileDir###FilePath###LastUpdate。

那麼測試應該變成這樣了:

為瞭解決這些紅杠,FileInfo得變成這樣。

(這裡有那麼一點點牽強,就是get方法和成員變數的來源不是“剛剛好通過測試”,而是測試原本是為了引出成員變數)

現在toString應該變成這樣:a.txt###c:\\###c:\\a.txt###2016-01-01。

所以測試應該變成這樣(這樣寫代碼好費時間!但參與設計的過程也相應變多,思考和工作量都在增長)

當然,測試失敗了,二者並不相等

 

 

原因當然在toString

修改FileInfo的toString方法:

測試通過了!

此時,我在想,如果因為某種原因,我想將###換成@@@,那麼toString方法中###應該以變數的形式出現。但因為此次將修改的代碼對通過測試沒有任何意義,也不能增加功能,所以我不這麼做。我會在什麼時候這樣做呢?我會等到代碼的功能很多,我重構它並能展示此時測試對我重構的意義的時候。

現在我們完成了設計1,來開始設計2吧。(未完……)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ORM到底哪家強? 很多人都想知道這個問題,自已也沒測試過,只能道聽途說。 閑的無聊就將幾個ORM拿出來比一比,假如懷疑測試代碼有問題可以將它下載下來慢慢研究。 參賽ORM 1、SqlSugar:是一款輕量級的MSSQL ORM ,除了具有媲美ADO的性能外還具有和EF相似簡單易用的語法,地址:ht ...
  • 通過TopSelf組件實現服務的自宿主,簡化服務的安裝和使用過程。 ...
  • 打開IIS10,進入應用程式池,右邊“設置應用程式池預設設置”中,啟用32位應用程式,False改為True即可。 ...
  • ...
  • Vs2015、Vs2013親測可行 感謝NopCommerce探索群(75272942)-深圳-阿海(13913127)提供解決方案 ...
  • 一.概述 java迴圈語句分為四種形式,分別是 while, do/while, for, foreach; python中迴圈語句有兩種,while,for; JavaScript中迴圈語句有四種,while,do/while,for,for/in jQuery迴圈語句each 二、java迴圈語 ...
  • 前言:本篇主要針對資料庫的操作,在這裡不適用hibernate或者mybatis,用最原始的JDBC進行講解,通過瞭解這些原理以後更容易理解和學習hibernate或mybatis。 1:jdbc的簡單操作 首先需要下載jdbc驅動的jar包 如果不想下載在C:\Program Files (x86 ...
  • 對於這個月,我主要是在學堂線上上學習MOOC。鄧老師講的很好 !!!這個月,我主要學習數據結構,還不時的到學校OJ上出出題。(PS:我也是學校OJ上的管理員)今天學校停電了。。。OJ管理系統都關了。。。我只好在家開著電腦邊聽歌邊刷清華北大OJ上的簡單題。。。因為難題實在不會。。。暴力我估計都會超時。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...