今天又去見客戶了
今天跟市場的人去跑。見一個客戶,都怪我連對方是什么樣的情況都不了解,去的很匆忙。只知道是做外貿的,想做個網站。 |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(126) | 評論 (0) | 編輯 收藏
今天跟市場的人去跑。見一個客戶,都怪我連對方是什么樣的情況都不了解,去的很匆忙。只知道是做外貿的,想做個網站。 |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(126) | 評論 (0) | 編輯 收藏
這兩天忙著學習關于單元測試,游戲的事情放到放下了。趁著現在有點時間,把我自己一個簡單的框架拿出來參考下。 |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(103) | 評論 (0) | 編輯 收藏
在javaeye學習一段時間單元測試后,雖然測試的文章不多,但都是經典帖子。同時也發現這里面討論的關注點大部分是對測試的目。對于該怎么測試,怎么樣才可以讓測試自動話 java 代碼
上面的功能模塊。下面是段測試代碼 java 代碼
經過測試以后,如果你修改了int add(int x, int y);里面的邏輯,如果修改的正確,測試代碼始終都是見到綠色的。如果你邏輯錯了。那不好意思,你的測試將會讓你重新寫那段邏輯代碼。直到你正確為止。 有個比較特殊的情況,如果我測試代碼寫成這樣,那我保證邏輯代碼的正確性,但我卻看不到我期待的綠色,這有是什么原因呢? java 代碼
我個人認為這個問題并是邏輯代碼的問題,而是你測試代碼中的邏輯問題, 噢,MyGot,作為程序員的我。已經為邏輯代碼傷腦筋了。還要為測試代碼煩惱,做人真命苦啊。 想來也確實是這樣。 這就引申了另外一個問題,怎么樣才可以保證我邏輯代碼的可測性? 目的之二代碼的可維護性。 就拿上面的例子來說吧。只要我們的單元測試是正確的,那我們就可以保證無論你怎么修改那段代碼,只要測試代碼可以產生綠色條,那OK,你修改的邏輯代碼是正確的。當然可維護并非只有這點,還有,比如保證修改了這段代碼不會影響到其他的模塊等。 目的之三代碼的可擴展。 對于這點我理解很膚淺。只能表達表面的東西,希望。 對于可擴展我覺得保遵循一個代碼之間的耦合度降到最低。就OK了。單元測試對這方面有很強的好處,為了程序的可維護性,它可以強迫你寫低耦合度的程序。 單元測試的優點 1、它是一種驗證行為。 2、它是一種設計行為。 3、它是一種編寫文檔的行為。 4、它具有回歸性。 單元測試的范疇
1、 它的行為和我期望的一致嗎? 2、 它的行為一直和我期望的一致嗎? 3、 我可以依賴單元測試嗎? 4、 單元測試說明我的意圖了嗎? |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(161) | 評論 (0) | 編輯 收藏
我做過的項目不多。也就幾個。做項目的經歷是個學習的過程。 |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(156) | 評論 (0) | 編輯 收藏
前陣子發表過 我的第一個真正意義上的測試 。 測試DAO不如連數據庫一起測試吧。因為DAO測試的目的不是DAO接口實現對不對,而是測試是否如你預期的發送了SQL,如你預期的返回了結果集。這個時候你Mock之后,測試就沒有意義了。 hyysguyang 大哥建議:篇
wuhua 寫道
分層的原因很多。這里我的看法片面就不說了
但對于mock來說是有莫大好處的。 比如service測試的時候完全可以做到隔離數據庫, 我現在的意思是, 但是數據庫的測試畢竟比較特殊,記住測試的目的是確保你的代碼質量,如果你確定你的這樣測就沒問題了,那無話可說,否則就盡量多的測試。 上面兩個大哥都建議測試DAO的時候還是連接數據庫為好。 但個人認為上面兩個大哥的單元測試以非純正的單元測試了,而是集成單元測試。 其實說白了,測試這東西只是為了項目更好,更快的完成。至于是否要求純單元,或者是集成單元測試,則看各位的需要,如果覺得集成單元測試對項目有幫助,那就用吧,現在發現對這個已經沒有明顯的界限了。 不理會它了,現在回歸到我們用戶注冊的例子。 java 代碼
實際實現代碼 java 代碼
java 代碼
|
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(132) | 評論 (0) | 編輯 收藏
測試Service,因為Service依賴的Dao, 所以只需Mock一個Dao即可。在這里我詳細的介紹關于注冊這個功能的測試 java 代碼
注冊功能的實現。 java 代碼
測試代碼 java 代碼
首先我們建立一個關鍵字查詢,name="wuhua"; 然后調用Dao的方法, 然后自定義返回一個自己預期的對象, 最后通過比較這個對象判斷結果是否是自己想要的 |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(355) | 評論 (0) | 編輯 收藏
Action的測試是比較辛苦的。因為它依賴與其他的環境(比如tomcat)。 java 代碼
有經驗的程序員見到上面的代碼應該就知道怎么測試了。 我們只需setAccount,跟setAccountService即可, 而Account本身來講就是是個po,所以可以自己new一個 AccountService則可以mock一個。真是太完美了,我太喜好mock,它總是給我驚喜 java 代碼
ok,一個測試的例子就好了。 |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(155) | 評論 (0) | 編輯 收藏
都說程序員很浮躁,動不動就那跳槽威脅公司,以提高自己的價值。 |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(95) | 評論 (0) | 編輯 收藏
經過前幾篇的測試學習跟實踐,我覺得有必要對這次學習做個總結。其實上面的話只是幌子,主要原因還是javaeye的 lighter 寫道
貌似這一篇文章要放在"agile"版塊更好一些吧.
btw:wuhua同學寫文章有時候可以把兩篇結合成一篇,可能會更好一些,不然讓別人看一篇文章要看一,二,三,四才能看完.個人建議而已,別見怪. 覺得他說的很對,當時是出于篇幅過程,怕javaeye blog不支持大篇幅的文章,所以拆開。不過我覺得我這個擔心是多余的。這里說句題外話,我用過很多Blog,但覺得這里是最好的。速度快,寫文章貼心(主要是對源代碼格式化方面做的很出色)。 好了,進入正題。 先介紹下我以前寫的那些文章先,讓大家對這篇文章有個初步的認識。 單元測試之測試目的, 單元測試之實踐一,關于設計的常見分層 單元測試之實踐二,關于DAO的測試 單元測試之實踐三 Service的測試
以前我正常的設計流程是Database->Model -> Dao-> Service -> Action ->View。這樣的設計伴隨我1年多了,這樣的設計方式好嗎?這樣的設計高效嗎? 代碼質量能保證嗎? 我可以很肯定的回答,不能,如果數據庫一該,我要在表格里面添加一個字段,或者什么的。那么它將會牽連到很多其他,修改的動作如下:Database->Model -> Dao-> Service -> Action ->View。 噢,my got,幾乎跟設計的一樣多,甚至更多,因為在修改的過程中你就算有再好IDE去重構它也不能保證它的正確性。然后你就要去測試,測試它的正確性。也許測試的過程將是修改過程的幾倍時間。所以我個人覺得這樣的設計方式是不高效的。總而言之就是這樣的設計遲早會出問題的? 為什么會這樣呢?難道就沒有一種解決辦法嗎? 經過這段日子學習我發現,以前的設計不能很好的保證質量是因為你沒有足夠的單元測試去支撐著它,所以你改了代碼后缺乏一個很好的手段去保持這段代碼的質量,換句話的意思就是,沒有一個靜態的人去監督你的工作(我把單元測試比喻為靜態的人,它只做一件事,就是督促你的代碼不出問題)。 好了。我們已經找到了適合保證我們代碼質量的方法了。但是我們還得提高我們的開發效率啊。這又怎么辦呢?是不是還按照以前的方式嗎?我想自己渾渾噩噩的活了20多年了。我想換種活法了,想找種更刺激,更有意義的生活方式。 設計有時候更生活是一樣的,應該經常探索,經常實踐才能感受的更多。 那好吧我們就來個徹底的變革吧。怎么變呢? 很明顯:那就是TDD。 該怎么做呢? 以前的方式:Database->Model -> Dao-> Service -> Action ->View。 TDD的方式:Test->其他。 先看看下面Dao的例子吧:以前的方式:IBaseDao -> BaseDao -> BaseDaoTest。 TDD:BaseDaoTest->IBaseDao->BaseDao.
好,非常好,怎么這段代碼不能運行呢?當然不行了,因為上面的很多類都沒有。那我們這段代碼的用途是什么呢? 用途就是:以為上面的從上面的代碼我很清楚自己以后要做什么。1,要建立一個Model,里面起碼有一個name屬性,然后你會發現我們要測試的功能段是accountDao.findAccounByName(a.getName()); 里面我們要求測試的SQL是from Account as a where a.name=?,意圖明確吧。好, 我們寫下實際代碼吧。 java 代碼
好,代碼寫好了。去運行我們的測試吧。結果是令人失望的。怎么會是紅色的呢。肯定是邏輯代碼出問題了(如果測試代碼沒問題的話)。經過檢查發現原來from Account as a where a.name=?跟from Account as 完全兩碼事。好改回去 java 代碼
怎么還是紅色啊。我不干了(程序員暴躁的情緒出來了,我就經常這樣)主管跟我說:“再查查吧。別灰心。” 后來查了半天發現原來 java 代碼
我只renturn一個預期的對象a java 代碼
而代碼卻要求我要傳入預期兩個對象才給我通過,所以代碼只return null。 最后改了這段代碼 java 代碼
終于通過了。綠色,綠色,我看到了。我對主管說。主管笑了。我也笑了 最后我郁悶下,寫這篇文章足足話了我22個小時, 第一次寫好了。殺毒突然重啟。所以全沒了。 第二次,提交不了。然后忘記備份,又全沒了 第三次成功了。過程跟TDD差不多。 |
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(261) | 評論 (0) | 編輯 收藏
posted @ 2006-12-30 09:06 路是爬出來的 閱讀(143) | 評論 (0) | 編輯 收藏