1、測試數(shù)據(jù)/運行數(shù)據(jù)的互不影響
在做測試時,通常都需要生成測試數(shù)據(jù),在測試運行完后又要進行測試數(shù)據(jù)的刪除工作,當測試和運行用的是同一個庫的情況下就很容易出現(xiàn)測試數(shù)據(jù)和運行數(shù)據(jù)互相影響的現(xiàn)象,這個時候在寫測試的時候就要特別的注意了,既不能讓運行數(shù)據(jù)影響了測試的結(jié)果,又不能讓測試數(shù)據(jù)影響到了運行數(shù)據(jù)。
通常來說,為了解決這個問題,會采用測試庫和運行庫分開的方式,采取這種方式的情況下就比較簡單了,不過有些時候還是挺麻煩的,畢竟要創(chuàng)建數(shù)據(jù)、刪除數(shù)據(jù)。
還有一種特殊的情況,例如一個這樣的項目:
項目已經(jīng)上線運行了,這個時候做了一個新的流程,在部署了新的流程到運行環(huán)境后,通常需要在運行環(huán)境中測試一下,這個時候問題就出現(xiàn)了,測試數(shù)據(jù)和運行數(shù)據(jù)并行,這個時候就要充分的考慮測試數(shù)據(jù)和運行數(shù)據(jù)的互不影響。
當然,上面的項目的情況是一個比較特殊的情況,就像icecloud說的,項目規(guī)劃的好的話是會有測試環(huán)境和運行環(huán)境的不同的,測試環(huán)境需要和運行環(huán)境完全一致,在有新增的東西需要部署到運行環(huán)境時先在測試環(huán)境進行測試,測試沒問題后再通過升級腳本部署到運行環(huán)境中。
這些方法確實是可以解決測試數(shù)據(jù)/運行數(shù)據(jù)的互相影響的問題,不過覺得還是有些的麻煩,覺得如果有一個工具可以幫忙避免測試數(shù)據(jù)/運行數(shù)據(jù)的互相影響,同時又可以讓你在寫測試的時候很容易的創(chuàng)建測試數(shù)據(jù),又不用擔心其他測試數(shù)據(jù)或運行數(shù)據(jù)對它造成影響,最后測試數(shù)據(jù)又可以安全的被清除,^_^,有個這樣的工具就好了.........
或者說大家在實際中碰到測試數(shù)據(jù)/運行數(shù)據(jù)并行的情況下會怎么辦呢..
2、單元測試
一直以來都實行TDD,不過發(fā)現(xiàn)我做單元測試的方法仍然不正確,盡管在測試的基本原則---"測試一定情況下單元的執(zhí)行是否和預期一致"上是正確的,但進行單元測試的方法并不正確,就像robbin所說,我做的是集成測試,因為我做單元測試時會去把該單元依賴的其他的對象所需要的東西也去進行模擬,這樣說起來可能過于生澀了,舉個例子吧:
有一個服務類,該服務類依賴一個Dao類,通過Dao從數(shù)據(jù)庫中獲取相關的信息后進行處理,我以前做單元測試的做法就是首先產(chǎn)生出測試數(shù)據(jù),由Dao先將測試數(shù)據(jù)進行持久,之后再通過調(diào)用服務類的方法去執(zhí)行,"一定的情況"通常都是由測試數(shù)據(jù)來控制,這點沒什么不對,就是控制所測試的單元的輸入。
測試的基本原則都是檢查在一定的輸入的情況下輸出是否符合預期,作為單元測試而言上面的做法不正確的地方就是去產(chǎn)生測試數(shù)據(jù)并由Dao先持久,其實作為單元測試而言,只需要測試當前對象執(zhí)行的正確性,也就是說它已經(jīng)假設了它所依賴的其他的對象產(chǎn)生的結(jié)果,這樣的單元測試才是有意義的,而且也變得更容易寫了,之前我所采用的那種測試其實是集成測試....
這樣說了后其實就很容易理解單元測試了,仍然是上面的服務類,它的單元測試的寫法應該是去Mock出Dao執(zhí)行的結(jié)果,當然,這個時候就要模擬Dao在返回幾種情況下服務的執(zhí)行情況了,這個是正常的,就是去控制服務的輸入,^_^,這樣可以看到,其實在單元測試中是不會出現(xiàn)多少測試數(shù)據(jù)的情況的,除了Dao,而且也不用去關心其所依賴的對象的執(zhí)行的正確與否,以及所依賴的對象是不是還依賴別的對象,^_^,可以保證測試的范圍就是本單元。
這樣做的潛在好處還在于會促進面向接口的編程,^_^
3、集成測試
集成測試就是需要創(chuàng)建出所依賴的對象的環(huán)境的一種測試方法,其實在有了單元測試的情況下,集成測試就可以完全的從系統(tǒng)的入口進行測試,例如B/S系統(tǒng)來講,它的入口都是頁面,也就是我們可以通過頁面來進行測試,這個時候可以看到,測試數(shù)據(jù)的問題又產(chǎn)生了...
當然,對于有些集成測試是需要編寫代碼的,這個時候就需要創(chuàng)建出入口對象所依賴的對象(以及它所依賴的對象)的環(huán)境,最后才能調(diào)用入口對象的方法進行測試,這樣就完成集成測試了。