Javaでの実践的なテスト手法:TDDをせずに

私たちはGoogleフォトのクローンを構築しており、テストはとても難しいです!

私たちのJavaアプリが正しいImageMagickプロセスを生成し、結果のサムネイルが正しいサイズであり、実際にサムネイルであることをどのようにテストするのでしょうか?猫の写真ではなく。どのようにして異なるImageMagickバージョンやオペレーティングシステムをテストするのでしょうか?

ビデオの内容

00:00 イントロ

ビデオは、Googleフォトのクローンのテストがなぜこれほど厄介なのかを概観することから始まります。前回のエピソードでは、画像からサムネイルを抽出し始めましたが、今度はそれをテストする方法が必要です。これは外部のImageMagickプロセスを介して行われるため、大変な作業になります。

01:05 JUnitの設定と最初のテストメソッドの記述

まず、JUnit 5を設定します。Spring Bootのようなフレームワークを使用していないため、JUnitで動作するために最小限のライブラリと設定を追加する良い練習になります。さらに、既存のコードをテストする方法を考えながら、テストメソッドのスケルトンを書き、テストメソッドの名前付けなどに注意を払います。

04:19 ImageMagickバージョン検出の実装

前回のエピソードで、Javaアプリを異なるシステムで実行すると予期しない結果や単なるエラーが発生することに気づきました。これは、異なるImageMagickバージョンが異なるAPIセットを提供するため、呼び出す必要があるためです。そのため、インストールされているImageMagickバージョンを検出するコードを調整し、ImageMagickが実際にインストールされていることを確認するテストメソッドを追加する必要があります。

10:32 テストトレードオフ

ImageMagickバージョンを検出することから明らかなように、本当の問題は、さまざまなオペレーティングシステムとインストールされたImageMagickバージョンで100%のテストカバレッジに到達するために、非常に洗練されたCI/CDセットアップが必要であり、このプロジェクトの範囲内にはありません。そこで、アプローチのメリットとデメリットについて議論しています。

12:00 @EnabledIfImageMagickIsInstalledの実装

しかし、私たちができることは、ImageMagickがインストールされている場合にのみ、残りのテストスイートが実行されるようにすることです。そのために、EnabledIfImageMagickIsInstalledというカスタムJUnit 5アノテーションを作成し、それを任意のテストメソッドやクラス全体に追加して、そのような動作を有効にできるようにします。ImageMagickがインストールされていない場合、テストは単に実行されず、醜いエラーメッセージが表示される代わりになります。

16:05 サムネイル作成のテスト成功

最も大きな問題は、どのようにしてサムネイルが正しく作成されたことを適切に確認するかです。この質問に対処するために、ImageMagickの終了コードをテストし、ファイルサイズを推定し、画像を読み込み、正しい画素数を確認します。これらすべては、AssertJとそのSoftAssertionsの助けを借りて、複数のアサーションを1つに簡単に組み合わせることができます。

23:59 Still Only Works on My Machine

ワークフロー全体をテストした後でも、異なるバージョンのImageMagick APIを呼び出すことを確認する必要があります。IM6およびIM7のサポートのためにその動作をすばやく追加し、完了です。

25:53 Deployment

アプリケーションをNASにデプロイする時間です。そして今回は、期待通りにすべて動作します!

26:20 Final Testing Thoughts

このエピソードでかなりのテストを行いました。学んだ課題と実践的なテスト戦略をすべて要約しましょう。

27:31 What’s Next

エピソードを終えるために、次のステップを見てみましょう:マルチスレッドの問題

次のエピソードでお会いしましょう。

Source:
https://dzone.com/articles/i-dont-tdd-pragmatic-testing-with-java