0

まもなく、私たちは新しいプロジェクトを開始します。Spring MVC ベースの Web アプリケーションになります。初めて、アプリケーションでテストを書き始めることにしました。

テストの作成には Junit、Mockito、Hamcrest を使用します。

テストを書くのはこれが初めてで、チームにはテストを書いた経験のある人がいないため、参考として使用できるサンプルアプリを探しています。

junitなどを使用してテストを作成する方法に関するネットおよびレッドの記事をいくつか見てきました。テストなどを作成する際のベストプラクティスは何ですか。

悪いテストを書き始めたくありません。

助けてください。

4

2 に答える 2

4

これは究極のリストではありませんが、私の経験からのいくつかの推奨事項です

  1. 特にJUnitを使用しているので(たとえばtestNGとは対照的に)、実際にユニットをテストしてみてください。これが意味することは、テストで実行順序が必要であることがわかった場合、ユニットをテストしているのではなく、統合または機能をテストしていることになります。

  2. #1に関連して、モッキングライブラリを使用することを強くお勧めします。私はMockitoを使用しています。使い方は非常に簡単で、テストは非常に読みやすくなっています。これが必要な理由は、合理的なクラスには他のクラス (そうでない場合、クラスはおそらくあまりまとまりがない) または外部リソース (DB など) への依存関係があり、単体テストでは 1 つのクラスのみをテストすることになっているためです。一度に、テスト対象ではない他のクラスをモックアウトする必要があります。

  3. テスト容易性のための設計。テストのためだけにメソッドを公開する (つまり、 publicにする)べきではないと思うので、これは注意が必要ですが、単体テストでそれらを直接呼び出すことができるように、いくつかのプライベート メソッドをパッケージで保護する必要がある場合があります。これは、メソッドがテスト環境で実行したくないこと (ファイルの作成など) を実行する場合に非常に便利です。そのため、これらの特定の部分を個別のメソッドに分離して、テストで回避することができます。単体テスト以外でメソッドを使用することを想定していない場合は、必ず javadoc にコメントしてください。

  4. 作業メソッドでリソースを作成したり開いたりしないようにしてください。たとえば、メソッドで開いて InputStream を作成するFileパラメータを使用する代わりに、InputStream を直接渡します。このようにして、テスト時にメモリ ストリームを渡すことができます。または、より一般的に言えば、依存性注入は単体テストと非常によく合います。メソッドを呼び出すたびnewに、単体テストの実行やアサートが難しくなる可能性があります。

  5. メソッドのテストを実行するには、最初に多くの外部メソッドを呼び出してテスト対象のユニットの状態を構成する必要があることに気付いた場合は、リファクタリングを行ったほうがよいでしょう。これは、結合度が高いことを示しています。これは、単体テストに関する私のお気に入りの 1 つです。クラスに 2 番目のユーザーを作成すると、設計を再確認するのに役立ちます。

多くの人がこれらの一部またはすべてに同意しないことは確かです。それらの人々には、それを独り占めしないでください。この回答にコメントして、近くに別のPOVがあるようにしてください。それは私にも役立ちます

于 2013-11-03T18:56:35.543 に答える