2012-04-21 1 views
2

パブリックファサードが1つあり、開始と終了の2つのメソッドを持つパッケージがあります。 このファサードは50+の内部/友好クラスパッケージのようなものなので、これらの内部クラスのいくつかを直接テストしてテストする方法が必要です。Javaフレンドリー/内部パッケージクラスと内部/フレンドリーメソッドのパブリックアクセサークラスを生成

私はEclipseとJUnitを使用しています。

リフレクションは良い方法ですが、なぜこのリフレクションコードを自分自身で書くのですか?ラッパーのパブリッククラス(.net visual studioなど)を生成する良いツールがありますか?

第2に、誰かがJUnitのデュアルソースツリーを管理する方法や、そのトピックの良い記事を紹介する方法を教えてください。 私はいくつかのブログ記事を見ましたが、ここからの誰かが良い説明/参照を持っているかどうかを見たいと思っています。

そして、最も重要なことは、内部クラスをテストするかどうかは私の質問ではなく、これは私の設計であり、これは私が働くことを好む方法です。 あなたはすべきではないかと思う人もいますので、回答を掲示しないでください。 stackoverflowで検索したところ、良いスレッドが見つかりませんでした。

ありがとうございました。

James

+1

好ましい方法は、JUnitを使用する並列ソースツリーであり、完全に反映されないようにします。テストしたい "内部"のものは、完全にプライベートではなく、パッケージプライベートにする必要があります。 –

+0

素晴らしい!私は.NETの世界から来て、そのことが正しく行われているかどうかに精通していません。私は最初にそれをうまくやりたいのですが、テクニックを投稿できますか? –

+0

:) 25%は低いですが、私は新しいユーザーで、ほとんどの質問をしていません... 私は良い答えを受け入れたいと思う以上に私を信じています。私は良いマナーを持つ礼儀正しい人です。現実のものとオンラインのものの両方。 –

答えて

1

デュアルソースツリーを維持するあなたの本能は正しいです。 2つのソースディレクトリを持ち、同じディレクトリ/パッケージ構造を持つだけです。同様に出力先を分離するようにコンパイルしますが、テストを実行するときにクラスパスにすべてを配置します。クラスが異なる出力ディレクトリであっても、それらのディレクトリ/パッケージ構造が同一であれば動作します。 Mavenを使用する場合、これが標準です。このツールでは、ソースディレクトリ名はsrc/mainsrc/testで、出力ディレクトリはtarget/classestarget/test-classesです。 Mavenがこれをサポートしているという事実は、この慣行がJavaコミュニティ内でどのように標準的であるかを示しており、自信を持って使用するべきです。 MavenをEclipseで使用することができます。多くの人が行います。

ユニットテストがパッケージ内にあるので、あなたはテストすることができますあなたが望むパッケージ保護されたすべてのクラス。私はテストだけと言う人には同意しないpublicもの。実際、TestNGの著者であるセドリック・バーストは、if it can break, it should be tested, and that includes private methodsと主張しています。私はユニットテストプライベートメソッドwith a little help from reflectionを持っています。もちろん、パッケージで保護されたものはテストするのが簡単です。それにもかかわらず、私はそれが唯一のpublicものをテストする必要があると言う宗教的な議論だと思う。

+0

うわー:)これはうまく動作します! –

+0

それを聞いてうれしい!受け入れてくれてありがとう。 –

1

私はルイ・ワッサーマンの応答を理解するとして、あなたはMyClassTestとMyClassのはしているので、その後のsrc /生産/ mypackageと/ MyClass.javaが

class MyClass 
{ 
     void start () { ... } 
     void stop () { .... } 

     class InnerClass1 { ... } 
     class InnerClass2 { ... }\ 
     ... 
     class InnerClass50 { ... } 
} 

のように見えます

src/production/mypackage/MyClass.java 

src/junit/mypackage/MyClassTest.java 

のようなファイル構造を持っています同じパッケージmypackage.MyClass.InnerClass1 ... 50はMyClassテストからテストできます。

MyClassがMyClassTestに依存しないことを確認します。プロダクションでは、プロダクションディレクトリ内のすべてをコンパイルできます(junitテスト全体をスキップします)。テストのため、両方のディレクトリをコンパイルします。

+0

@ sparc_spreadと一緒にお返事いただき、ありがとうございます。これが私の問題を解決しました。 –

関連する問題