2

開始と停止の2つの方法で、単一のパブリックファサードを持つパッケージがあります。このファサードは50以上の内部/フレンドリークラスパッケージのようなものであるため、これらの内部クラスのいくつかを直接テストできるようにする方法が必要です。

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

リフレクションは良い方法ですが、なぜこのリフレクションコードをすべて自分で作成するのか、ラッパーのパブリッククラスを生成する優れたツールがありますか(.net Visual Studioのように)?

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

そして、最も重要なのは、内部クラスをテストするかどうかにかかわらず、ここでの私の質問ではありません。これは私の設計であり、これが私がどのように作業することを好むかです。すべきだと思う人もいれば、すべきではないと思う人もいるので、次のような回答を投稿しないでください。公開のみをテストして問題を解決する必要があります。私はstackoverflowで検索しましたが、それについての良いスレッドを見つけることができませんでした。

前もって感謝します 、

ジェームズ。

4

2 に答える 2

1

デュアル ソース ツリーを維持したいというあなたの本能は正しいものです。同じディレクトリ/パッケージ構造を持つ 2 つのソース ディレクトリを持つだけです。同様に個別の出力先にコンパイルしますが、テストを実行するときにすべてをクラスパスに入れます。クラスが異なる出力ディレクトリである場合でも、それらの同一のディレクトリ/パッケージ構造が機能します。Maven を使用する場合、これが標準です。そのツールでは、ソース ディレクトリ名はsrc/mainおよびsrc/testであり、出力ディレクトリはtarget/classesおよびです。target/test-classes. Maven が標準でこれをサポートしているという事実は、Java コミュニティ内でこのプラクティスがいかに標準的であるかを示しており、自信を持って使用する必要があります。(さらに言えば、Maven を使用することをお勧めします。Maven を使用すると、作業がずっと簡単になります。Eclipse で Maven を使用することができ、多くの人が使用しています。)

単体テストがパッケージ内にあるため、必要なすべてのパッケージで保護されたクラスをテストできます。テストのことだけを言う人には同意しませんpublic。実際、TestNG の作成者である Cedric Beust と同様の著名人は、それが壊れる可能性がある場合はテストする必要があり、それにはプライベート メソッドが含まれると主張しています。リフレクションの助けを借りて、プライベート メソッドの単体テストを行いました。もちろん、パッケージで保護されたものはテストが簡単です。publicとにかく、物事だけをテストすべきだ と言うのは宗教的な議論だと思います。

于 2012-04-21T01:38:30.507 に答える
1

Louis Wasserman の応答を理解しているように、ファイル構造は次のようになります

src/production/mypackage/MyClass.java

src/junit/mypackage/MyClassTest.java

次に、 src/production/mypackage/MyClass.java は次のようになります

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

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

MyClassTest と MyClass は同じパッケージにあるため、mypackage.MyClass.InnerClass1...50 は MyClass テストからテストできます。

MyClass が MyClassTest に依存していないことを確認してください。本番環境では、本番ディレクトリ内のすべてをコンパイルできます (junit テストを完全にスキップします)。テストのために、両方のディレクトリをコンパイルします。

于 2012-04-21T01:02:53.633 に答える