これは、#Hacktoberfest の一環としてより多くの OSS 開発者に届くことを願って、Medium.com に私の記事を再投稿したものです。
不安定な並列化テストに対処しなければならなかったことがありますか?同じリソース ファイルを共有するテストを修正し、それらを並行して変更して、自分自身と他のテストの結果を混同しなければならなかったことがありますか?このようなコードを適切に並列化して再現性と保証された結果を得るために、何夜もかけてリファクタリングを試みたことがありますか?
これは複雑なトピックであり、特に既存の大規模なコード ベースでは、必ずしも簡単に解決できるとは限りません。ただし、単純なルール セットに従うと、そこに到達するのに役立ちます。carlspring/べき等性フレームワークは、これを支援することを目的としています。
テストを常に再現可能にするには、テストのリソース ファイルが含まれ、テストだけに隔離されていることを確認する必要があります。これが意味するのは、各テストはそのテスト リソースを排他的に所有する必要があり、他のテストはそれらを変更してはいけないということです。
テストの冪等性とは、テストが常に同じ結果を返すことを意味します。テストが何回実行されたか、他のテストが並行して実行されているかどうかは関係ありません。
これは、JUnit5 テスト用に独立した方法でテスト リソース ファイルを定義およびコピーするのに役立つ軽量のフレームワークです。テスト リソースはアノテーションを使用して定義され、テスト リソースの分離と分離の実装に役立つように独自のディレクトリにコピーされます。
すべての共通テスト リソースは、通常どおり src/test/resources ディレクトリに保存されます。次に、各テスト メソッドは @TestResources アノテーションを使用して、必要なリソースを定義します。フレームワークは、これらのリソースをテスト メソッドごとに分離されたディレクトリにコピーします。これにより、必要なリソースに排他的にアクセスできるようになり、同じテスト クラス内の他のテスト メソッドなど、並行して実行される他のテストからの干渉が防止されます。
各ビルド ツールには、そのツールの特定のディレクトリ レイアウトのパス関連の変換ロジックを含む個別の依存関係があります。 (非常に単純化した例として。Maven はビルドされたコードをターゲットの下に配置しますが、Gradle はこの目的でビルドを使用します。リソースの配置方法が異なるなど)。詳細については、以下で説明します。
開始するために必要な手順は次のとおりです。
ビルド ツールのそれぞれの依存関係を定義する必要があります。最新リリースバージョンが何であるかをここで確認できます。
testImplementation "org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3"
testImplementation("org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3")
org.carlspring.testing.idempotence idempotence-maven 1.0.0-rc-3 test
テスト クラスには @ExtendWith(TestResourceExtension.class) アノテーションを付ける必要があります。このアノテーションは、リソースの実際のコピーを担当します。
必要なリソースを指定するには、テスト メソッドに @TestResources アノテーションを付ける必要もあります。
例えば:
package com.foo; import org.carlspring.testing.idempotence.annotation.TestResource; import org.carlspring.testing.idempotence.annotation.TestResources; import org.carlspring.testing.idempotence.extension.TestResourceExtension; @ExtendWith(TestResourceExtension.class) class MyTest { @Test @TestResources({ @TestResource(source = "classpath:/foo.txt"), @TestResource(source = "classpath*:/**/bar.txt")} ) void testFoo() { // Perform whatever checks you need using these resources } }
テスト メソッドごとに、次の形式を使用してディレクトリが作成されます:
build/test-resources/MyTest-testFoo/nested/dir/foo.txt build/test-resources/MyTest-testFoo/bar.txt
target/test-resources/MyTest-testFoo/nested/dir/foo.txt target/test-resources/MyTest-testFoo/bar.txt
このようにして、テストに必要なリソースが独自の分離されたディレクトリにコピーされます。この時点で、これらのテスト リソースは、それらが属するテスト メソッドから変更でき、他の種類の共有リソース (データベース、サードパーティ サービスなど) ではなく、ファイル ベースのリソースのみに依存する限り、結果は冪等になります。
冪等プロジェクトのドキュメントはここにあります。
物事がどのように機能するかの詳細な説明については、概念の概要をご覧ください。
これは、コア機能とインフラストラクチャが整備されたグリーンフィールド プロジェクトですが、サポートはいつでも大歓迎です。
JUnit、Springframework、MkDocs の経験を持つ貢献者は、素晴らしいアイデアやソリューションを提供してプロジェクトを形作るのに役立つ可能性があります。フィードバックを提供していただけるアーリーアダプターも大歓迎です!
ハックトーバーフェストまたはヘルプ募集とラベル付けされた問題はすぐに開始できるため、すぐに開始できるはずです。ここで見つけることができます。
テスト ケースを作成するときに最も重要なことの 1 つは、テストで使用されるテスト データと、実行間でデータを正常に保つことです。一連の単純なルールに従って、テスト間でこのデータを分離することで、結果の冪等性と信頼性を実現できます。
carlspring/idempotence プロジェクトは、グリーンフィールド プロジェクトとレガシーのリファクタリングの両方に適した使いやすいフレームワークを提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3