1. ホーム
  2. java

[解決済み] JUnitのクラスを特別なテストパッケージに分離する?

2022-08-20 17:28:29

質問

テスト駆動開発の概念について、以下の本を読んで学んでいます。 職人の記事 (クリック 職人 トピック別 ) が、私の以前の質問に対する回答で推奨されています。 JUnitと適切なソフトウェアエンジニアリングを学ぶためのサンプルプロジェクト"。 . 私は今のところそれを愛しています

しかし、今は座って自分でやってみたいと思っています。簡単な答えで済むような質問をしたいのですが。

どのようにあなたのJUnitテストクラスと実際のコードを整理しますか? 私は主にパッケージ構造について話していますが、注意すべき他の概念も参考になるでしょう。

テストクラスを org.myname.project.test.* に置き、通常のコードを org.myname.project.* に置くのでしょうか?テスト クラスを通常のクラスと一緒に配置しますか? クラス名に接尾辞をつけるよりも、Testという接頭辞をつける方が好きですか?

これは私がすぐに心配すべきではない種類のもののように思えますが、私は非常に組織中心の人間です。私は ほとんど 実際に物事を成し遂げるよりも、何をすべきかを追跡する方法を考えることに多くの時間を費やすような人間なのです。

そして、現在きちんとパッケージに分かれているプロジェクトがあるのですが、そのプロジェクトがぐちゃぐちゃになってしまいました。すべてをリファクタリングしてテストを書こうとするのではなく、まずテストありきで新しく始めたいと考えています。しかし、最初に私は自分のテストがどこに行くのかを知る必要があります。


を編集します。 Mavenのことをすっかり忘れていたのですが、大多数の方が使っているようですね。以前、Mavenが完全に壊れてしまって、Antが必要な柔軟性を与えてくれたという特定の使用例があったので、結局Antに固執していたのですが、多分アプローチが間違っていたのだと思います。Mavenはテスト駆動開発と相性が良さそうなので、もう一度試してみようと思います。

どのように解決するのか?

私は、テストクラスをテストするプロジェクトクラスと同じパッケージに入れることを好みますが、次のように異なる物理ディレクトリに入れます。

myproject/src/com/foo/Bar.java
myproject/test/com/foo/BarTest.java

Mavenのプロジェクトでは、このようになります。

myproject/src/main/java/com/foo/Bar.java
myproject/src/test/java/com/foo/BarTest.java

この要点は、私のテストクラスがパッケージスコープのクラスとメンバにアクセスできる(そしてテストできる!)ことです。

上の例で示すように、私のテストクラスはテストされるクラスの名前に加え Test をサフィックスとして持っています。数百のテストクラスから検索を試みるのは、あまり面白いことではありません。 Test ...

更新 Ricketのコメントに触発されて:この方法でテストクラスは(典型的には)クラス名のプロジェクト単位のアルファベットリストでテストされた仲間のすぐ後に表示されます。(おかしなことに、私は意識的にどのように気づくこともなく、日々この恩恵を受けています...)

アップデート2。 多くの開発者(私を含む)がMavenを気に入っていますが、そうでない人も少なくとも同じくらいいるようです。IMHO では、Maven は Java プロジェクト (私はプロジェクトの約 90% をこのカテゴリに入れます...しかし、残りの 10% はまだかなりの少数派です) に非常に有用です。Mavenの規約を受け入れることができれば、簡単に使うことができますが、そうでない場合は、悲惨な苦労を強いられることになります。Mavenは、Antで培われた多くの人々にとって理解するのが難しいようで、どうやら全く異なる考え方を必要とするようです。(私自身、Antを使ったことがないので、この2つを比較することはできません。) 1つ確かなことは、ユニット (および統合) テストをプロセスにおける自然で第一級のステップにし、開発者がこの重要なプラクティスを採用するのを助けるということです。