初めて自分の家と他人の家が違う、と意識した時

JavaSE6で開発をしております。

eclipse3.6を用いて、JUnit3でテストを行っているのですが、
クラスのプライベートメソッドをテストするにはリフレクション以外の方法はないのでしょうか。

リフレクションを使う方法ですと、テストコードが複雑になりがちで、publicメソッドに比べると、テストするのがしんどいです。

JUnit3に限らない、他のテストフレームワークでも構いませんので、プライベートメソッドをテストする、よい方法はないものでしょうか。

A 回答 (2件)

なんでprivateなメソッドをテストしなくちゃいけないのか


という問題があるけど
テストはリフレクション必須ね

JUnit-addonsを使えば
PrivateAcceccorクラスがあるので
これを使えばコードがすこしすっきりするわ

この回答への補足

回答ありがとうございます。

プライベートメソッドをテストしたかったのはriverotterさんの指摘にもある通り、クラスの共通内部処理の動作確認をしたかったからです。

できるだけ、publicメソッドのテストだけで済むように、リファクタリングを検討するとともに、どうしても必要な場合は、PrivateAccessorを試してみようと思います。

補足日時:2011/04/03 21:13
    • good
    • 0

そもそも、なぜプライベートメソッドを用意してるのでしょうか?


クラスの拡張などを考慮するとprotectedにした方が良いメソッドも結構あると思います。
本末転倒ですが、もしprotectedにできるなら、protectedメソッドに変更するのも一つの手です。。

プライベートメソッドって、クラス内の共通処理として書いていることが多いと思います。言い方を変えれば、全てのプライベートメソッドは他のメソッドの一部として記述されます。
なので(あくまで私の今までの経験からですが)、publicメソッドのテストケースは関連するprivateメソッドをすべて通るように用意します。

もしそうする事で、一つのメソッド(もしくはクラス)のテストケースが膨大な数になるようでしたら、メソッドやクラスが複数の責務を無理やり一つにまとめているような場合もありますので、一度リファクタリングを検討してみた方が良いと思います。
こういったクラスは、製造時に一生懸命頑張って作ってテストしても保守フェーズで問題になることが多いので、可能であれば製造、単体テスト時点で見直すのがベストです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

プライベートメソッドをテストしたかったのはご指摘の通り、クラス内の共通処理の動作確認をしたかったからです。

本来は設計の段階で細かく切り分けた方がよいのでしょうが、
設計の経験値が足りず、ひとつのクラスで動くものを作ってからリファクタリングで切り分ければようとしていました。

そのため、プライベートメソッドが増えてしまい、publicメソッドのテストだけでは、原因がわかりにくくなっていたので、プライベートメソッドのテストケースを書くようになっていました。

回答のおかげで、そもそもプライベートメソッドをテストしなければならない状況がよろしくないことがわかりました。

リファクタリングで、機能の切り分けを検討したいと思います。

お礼日時:2011/04/03 21:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!