「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java 用の carlspring/べき等性フレームワークを使用した並列化可能なテストの作成

Java 用の carlspring/べき等性フレームワークを使用した並列化可能なテストの作成

2024 年 11 月 8 日に公開
ブラウズ:241

Writing parallelizable tests with the carlspring/idempotence framework for Java

免責事項

これは、#Hacktoberfest の一環としてより多くの OSS 開発者に届くことを願って、Medium.com に私の記事を再投稿したものです。

導入

不安定な並列化テストに対処しなければならなかったことがありますか?同じリソース ファイルを共有するテストを修正し、それらを並行して変更して、自分自身と他のテストの結果を混同しなければならなかったことがありますか?このようなコードを適切に並列化して再現性と保証された結果を得るために、何夜もかけてリファクタリングを試みたことがありますか?

これは複雑なトピックであり、特に既存の大規模なコード ベースでは、必ずしも簡単に解決できるとは限りません。ただし、単純なルール セットに従うと、そこに到達するのに役立ちます。carlspring/べき等性フレームワークは、これを支援することを目的としています。

テストの分離とは何ですか?

テストを常に再現可能にするには、テストのリソース ファイルが含まれ、テストだけに隔離されていることを確認する必要があります。これが意味するのは、各テストはそのテスト リソースを排他的に所有する必要があり、他のテストはそれらを変更してはいけないということです。

テスト冪等性とは何ですか?

テストの冪等性とは、テストが常に同じ結果を返すことを意味します。テストが何回実行されたか、他のテストが並行して実行されているかどうかは関係ありません。

Java 用の carlspring/冪等フレームワークとは何ですか

これは、JUnit5 テスト用に独立した方法でテスト リソース ファイルを定義およびコピーするのに役立つ軽量のフレームワークです。テスト リソースはアノテーションを使用して定義され、テスト リソースの分離と分離の実装に役立つように独自のディレクトリにコピーされます。

Java carlspring/べき等フレームワークの仕組み

すべての共通テスト リソースは、通常どおり src/test/resources ディレクトリに保存されます。次に、各テスト メソッドは @TestResources アノテーションを使用して、必要なリソースを定義します。フレームワークは、これらのリソースをテスト メソッドごとに分離されたディレクトリにコピーします。これにより、必要なリソースに排他的にアクセスできるようになり、同じテスト クラス内の他のテスト メソッドなど、並行して実行される他のテストからの干渉が防止されます。

各ビルド ツールには、そのツールの特定のディレクトリ レイアウトのパス関連の変換ロジックを含む個別の依存関係があります。 (非常に単純化した例として。Maven はビルドされたコードをターゲットの下に配置しますが、Gradle はこの目的でビルドを使用します。リソースの配置方法が異なるなど)。詳細については、以下で説明します。

Java carlspring/べき等性フレームワークを使用してテストを作成する方法

開始するために必要な手順は次のとおりです。

依存関係を定義する

ビルド ツールのそれぞれの依存関係を定義する必要があります。最新リリースバージョンが何であるかをここで確認できます。

  • Gradle の場合 (Groovy DSL を使用):

testImplementation "org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3"


  • Gradle (Kotlin DSL を使用):

testImplementation("org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3")


  • Maven の場合:

org.carlspring.testing.idempotenceidempotence-maven1.0.0-rc-3test

注釈の追加

テスト クラスには @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
    }

}


テスト メソッドごとに、次の形式を使用してディレクトリが作成されます:

  • Gradle プロジェクトの場合、メソッド testFoo を持つ MyTest というテストを使用します。 それらは
  • の下に配置されます。

build/test-resources/MyTest-testFoo/nested/dir/foo.txt
build/test-resources/MyTest-testFoo/bar.txt


  • Maven プロジェクトの場合、testFoo メソッドを使用した MyTest というテストを使用します。 それらは
  • の下に配置されます。

target/test-resources/MyTest-testFoo/nested/dir/foo.txt
target/test-resources/MyTest-testFoo/bar.txt


このようにして、テストに必要なリソースが独自の分離されたディレクトリにコピーされます。この時点で、これらのテスト リソースは、それらが属するテスト メソッドから変更でき、他の種類の共有リソース (データベース、サードパーティ サービスなど) ではなく、ファイル ベースのリソースのみに依存する限り、結果は冪等になります。

ドキュメントの場所

冪等プロジェクトのドキュメントはここにあります。

物事がどのように機能するかの詳細な説明については、概念の概要をご覧ください。

貢献方法

これは、コア機能とインフラストラクチャが整備されたグリーンフィールド プロジェクトですが、サポートはいつでも大歓迎です。

JUnit、Springframework、MkDocs の経験を持つ貢献者は、素晴らしいアイデアやソリューションを提供してプロジェクトを形作るのに役立つ可能性があります。フィードバックを提供していただけるアーリーアダプターも大歓迎です!

ハックトーバーフェストまたはヘルプ募集とラベル付けされた問題はすぐに開始できるため、すぐに開始できるはずです。ここで見つけることができます。

結論

テスト ケースを作成するときに最も重要なことの 1 つは、テストで使用されるテスト データと、実行間でデータを正常に保つことです。一連の単純なルールに従って、テスト間でこのデータを分離することで、結果の冪等性と信頼性を実現できます。

carlspring/idempotence プロジェクトは、グリーンフィールド プロジェクトとレガシーのリファクタリングの両方に適した使いやすいフレームワークを提供します。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/carlspring/writing-Parallelizable-tests-with-the-carlspringidempotence-framework-for-java-420n?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3