「Joshua Bloch TDD」をグーグルで検索したところ...あまり出てきませんでした。この件について彼が何を言わなければならないかを本当に知りたいので、これは非常に残念です。
項目 13 (第 2 版を見ています) は、「クラスとメンバーのアクセシビリティを最小限に抑える」というタイトルです。数ページの後、彼は次のように述べています。
テストを容易にするために、クラス、インターフェイス、またはメンバー* をよりアクセスしやすくしたくなるかもしれません。... public クラスの private メンバーをテストするために package-private にすることは許容されますが、アクセシビリティをそれ以上に高めることは許容されません... 幸いなことに、それも必要ではありません。テストは、テスト対象のパッケージの一部として実行できるため、そのパッケージ プライベート要素にアクセスできます。
* 「メンバー」とは、「フィールド、メソッド、ネストされたクラス、およびネストされたインターフェース」を意味します。
TDD初心者ですが、徐々に足を踏み入れていると、現在のコンセンサスには、アプリコードパッケージを使用したテストクラスが含まれていないようであり、src\testとsrc\mainの下に一致する構造さえも含まれていないようです。ほとんどがTDDです。専門家は別の方法でテスト用ディレクトリを構成しているようです (たとえば、"unittests" という名前のディレクトリと "functionaltests" という名前のディレクトリと "e2etests" という名前のディレクトリがあります)。
具体的には、「テストによって導かれるオブジェクト指向ソフトウェアの成長」で、オークション アプリの TDD 開発を追跡しました。作成者は、何百ものパブリック メソッドを追加することに何の不安もありません。さらに、ある章の後、ダウンロードした「これまでの構造」を調べたところ、テストのディレクトリ構造を完全に変更して、テストのカテゴリに分けていました...
少なくとも過去に、これがジレンマの原因であることに気付いたベテランの TDD 担当者はいますか? もしそうなら、どのように解決しましたか?
実用的な例として、私は Lucene インデックス アプリを開発することで TDD 手法に慣れています。このアプリはドキュメントにインデックスを付け、クエリを実行できるようにします。現時点では、すべてのアプリ クラスが同じパッケージに含まれています。実際に公開する必要main
がある唯一のメソッドは、1 つのクラスにあります。それでももちろん、私は非常に多くのパブリック メソッドを持っています。TDD を使用しているという事実がなければ、それらはすべてパッケージ プライベートである可能性があります。
PS「メソッドの可視性」のタグがないため、「クラスの可視性」を選択しました
後で
「Growing Object-Oriented...」で採用されたアプローチによって、私はかなり不幸な道に導かれたようです.パブリックメソッドの過剰使用は、それがテクニックのデモンストレーションであるという理由だけで使用されたと思われます. ハ。
テストのカテゴリを分割したい場合、この種のアプローチを使用する人はいますか?
\src\unit_tests\java\core\MainTest.java
だけでなく、例えば:
\src\func_tests\java\core\MainTest.java
と
\src\e2e_tests\java\core\MainTest.java
?