對於TDD,我該如何準備資料

2021-09-08 08:59:10 字數 1319 閱讀 5497

在開始編寫乙個測試之前,準備資料是乙個比較頭疼的問題。對於乙個測試,我至少有兩種方法來準備資料:

1. 建立乙個帶資料的檔案,在before的方法中載入它

2. 建立乙個builder在**中構建乙個資料的檔案流或記憶體物件

這兩種方法都可以達到我的目的,那麼我該用那種方法呢?首先,我需要知道兩種方法的各自優勢和缺點是什麼?

1. 模版資料檔案,這種方法準備資料快並且簡單,我們可以從實際的系統中匯出乙個檔案用於測試,資料量可以比較多。但缺點是測試**必須知道這個檔案的位置,測試的部署比較麻煩,而且檔案格式的變化會導致測試失敗。如果不同測試對資料內容需求不同,就要建立新的檔案來適應測試變化。

2. 動態建立資料流/記憶體物件,這種方法相對比較靈活,可以隨意的組織資料,資料的建立過程與測試**能更好的保持同步,並且不會受資料檔案的位置影響。缺點是如果要準備大資料量,非常費力,而且速度會很慢。

所以結論是當我們的測試需要資料量小並且格式靈活的時候,我們應當用動態資料流/記憶體物件,通常這也是單元測試的特點。如果我們的測試需要大量固定格式的資料,那麼我們應該用模版資料檔案,這種特點通常是整合測試或功能測試的特點。

理論只有聯絡實際才能產生效果。下面以建立乙個cvs讀寫物件來說明這個理論。

假設我要寫乙個cvsoperator來讀寫cvs檔案,目的是我能通過行號和列號來獲取字段內容。這個時候,我在想我是從什麼地方找乙個現成的cvs檔案呢?還是建立乙個cvs builder的記憶體物件。按照tdd的做法,我們應該以盡可能小的步驟前進,而乙個大而全的cvs檔案對我來說太複雜了。所以我建立了乙個簡單的cvsfilebuilder物件

class cvsfilebuilder 

public void buildhead(string line)

}

非常的簡單,就是讀寫流。接來了寫乙個測試,

@test

public

void should_read_head_from_cvs_file() throws

ioexception

因為這個時候的cvsoperator沒有任何實現**所以你會看到很多紅的警告。這也是我們要去實現的方法。所以我就繼續coding下去。

public

class

cvsoperator

public

cvshead gethead()

class

cvshead

public string getfield(int

index)

}}

非常快速的讓測試通過,是tdd的乙個原則。未完待續^_^

我該如何選擇

專案原本計畫是1個月調研,3個月完成開發以及測試!結果調研延期了,原本我是專案經理的角色,負責調研,以及給下面的人分配任務。結果小老闆卻在中途讓我搭專案框架,然後還要教他技術方面的知識,結果進度延期,而且很明顯地感覺管理混亂。我承認我有很大的責任,而在這個時候,小老闆問我原因我沒有說話,然後小老闆向...

電子資料時代我該如何儲存我的資料?

電腦是我們存資料最常用的工具了。但是硬碟可能會隨著年齡增長就退休了。還是需要把重要資料備份其他介質中。u盤?只是乙個資料中轉站,不是長久儲存資料的地方。行動硬碟也是最常用的介質了。現在空間都是 2t大小的,挺好的,個人儲存基本夠用。會員時代?對!好的服務是需要費用支援,可以想一下乙個 64g的 u盤...

我該如何介紹我自己?

幾何上我們知道兩點連成線,我們要做的就是在自己原點的基礎上找下乙個點然後連過去而以 可能不是直線 只是可能我們下乙個點是 工資加2000 要當專案經理 離家近 不是說這些點不好,這些都是很具體的目標符合s.m.a.r.t原則,只是我們經常拿別人的目標來跟自己比較而以,而別人的所到達的目標可能是經過好...