Index: [Article Count Order] [Thread]

Date:  Wed, 6 Jun 2001 16:03:41 +0900
From:  Eiji Yamane <e-yamane@....jp>
Subject:  [XP-jp:01980] Re: JUnit 	で private なメソッドのテスト
To:  extremeprogramming-jp@....jp
Message-Id:  <200106061603.EBG08599.BOBFFZN-@....jp>
In-Reply-To:  <20010606152723.B40B.NOBUYA@....jp>
References:  <20010606152723.B40B.NOBUYA@....jp>
X-Mail-Count: 01980

山根です。
久々の投稿です。

> 田中伸也@京都工芸繊維大学と申します.
> 
> JUnitでprivateなメソッドをテストする方法がわかりません.
> 皆様どのようにされているか教えていただけないでしょうか?
> 
> 1. privateなメソッドはテストしない.
> 2. 一時的にpublicにしてテストする.
> 3. TestCaseを継承するクラス内で実装する.

僕は、1案を採ってます。
テストクラスは、同一パッケージに追いて、パッケージプライベートの
メソッドまでのテストに留めています。

昔は、2案を採っていたのですが、結局テストする度に、
コードに手が入るので、毎日テストしていると、
結構嫌になります。

多分、3は論外だと思います。f(^_^;

便乗質問になりますが、皆さん、ある任意のクラスが呼び出している
クラスの品質が悪い、またはスタブ状態であるといった
状況で、JUnitを使う場合どのように試験を行っていますか?

現状は、クラス内部でオブジェクトを生成する場合は、
パッケージプライベートのファクトリ用のメソッドを作って、
それを、テストクラスのインナークラスとして定義を行い、
ファクトリメソッドをオーバライドして、
呼び出し先クラスの振る舞いをテストコードが制御するようにして
試験を行っているのですが、これだと、
テストコードのコード量が、多くて多くて困ってます。

さらに、呼び先のクラスがfinalだったり、staticだったりすると、
呼び先のクラスが正常動作するまでテストコードを走らせられない
という状況になってしまいます。

XPを完全に導入すればこのような問題も無くなるのでしょうが、
僕の弁舌の才では上司を納得させる事が出来ず、
テスティングフレームワークとリファクタリングを導入するので
いっぱいいっぱいでした。f(^_^;

他クラスの品質に依存しない効率的なテストの仕方(または、テストを
見越したコーディング)ってご存知ですか?

それとも、そもそも考え方が誤っていたりしますか?

山根英次(Eiji Yamane)
    E-Mail:e-yamane@....net(できればこっちに送って下さい)
           e-yamane@....com(そのうち無くなるかもしれません)
    URL   :http://www.ne.jp/asahi/e/yamane/index.html