離弦之Ray

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks

          問:如何對私有方法進(jìn)行單元測試?

          答:重點(diǎn)在于,你不應(yīng)該有任何方法是從一開始設(shè)計(jì)出來就是private的,因?yàn)槟愕拿慷纬绦蚨紤?yīng)該在單元測試的驅(qū)動(dòng)之下產(chǎn)生,而測試是不可能驅(qū)動(dòng)出 來一個(gè)private方法的。那么private方法從哪里來?只能從重構(gòu)而來。所以答案是:private方法是不需要測試的,因?yàn)樗侵貥?gòu)的產(chǎn)物,而 重構(gòu)是不改變程序可觀察之行為的。既然行為不改變,測試自然也不需要有任何改變,所以不需要針對private方法建立任何新的測試。

          問:但是,如果private方法確實(shí)出現(xiàn)問題了怎么辦?如果確實(shí)希望用測試來弄清一個(gè)private方法里面到底發(fā)生了什么,該怎么辦?

          答:如果一個(gè)private方法復(fù)雜到你不能一眼看清它,那它就太復(fù)雜了,你應(yīng)該把它重構(gòu)成為一個(gè)獨(dú)立的class,然后針對這個(gè)class來建立單元測試。

           

           

           

          posted on 2008-04-16 20:54 離弦之ray的技術(shù)天空 閱讀(2023) 評論(3)  編輯  收藏

          Feedback

          # re: [轉(zhuǎn)]如何對private方法進(jìn)行單元測試[未登錄] 2008-09-04 16:20 xan
          可以通過反射設(shè)置方法能見來測試private方法  回復(fù)  更多評論
            

          # re: [轉(zhuǎn)]如何對private方法進(jìn)行單元測試 2008-10-10 16:39 畢竟紅塵
          我反正都是通過main來測試private函數(shù)...
          這個(gè)解答得很微妙
          因?yàn)閜rivate都是重構(gòu)的產(chǎn)物,所以private的代碼是不需要測試的?
          那么是不是還應(yīng)該證明,“重構(gòu)的產(chǎn)物是不需要測試的”?
          解答里面,似乎是想通過“重構(gòu)是可以不改變程序之行為”來證明“,“重構(gòu)的產(chǎn)物是不需要測試的”?”

          但是,緊接著是不是應(yīng)該證明下“重構(gòu)不改變程序之行為,所以不改變程序行為的代碼,是不需要測試的”?

          繞啊...
            回復(fù)  更多評論
            

          # re: [轉(zhuǎn)]如何對private方法進(jìn)行單元測試 2008-10-26 00:19 離弦之ray的技術(shù)天空
          這個(gè)回答是在純理想化的情況下

          現(xiàn)實(shí)中嘛就……

          除了反射,還可以用MOCK的方法來測試
          即編寫一個(gè)Mock類繼承要被測試的類
          然后將對應(yīng)的private方法overriding成public的繼而進(jìn)行測試

            回復(fù)  更多評論
            


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 万山特区| 东宁县| 息烽县| 海原县| 额济纳旗| 烟台市| 北海市| 沂南县| 哈尔滨市| 桓台县| 喀喇沁旗| 区。| 彰化县| 山阳县| 勃利县| 威信县| 灵璧县| 三亚市| 承德市| 邵东县| 朝阳区| 新郑市| 同德县| 朝阳县| 滨州市| 广安市| 黔江区| 札达县| 彭阳县| 柞水县| 喀喇| 米林县| 建水县| 青川县| 百色市| 宜兴市| 塔城市| 海阳市| 昭苏县| 河池市| 涿州市|