データ接続と統合Java基本的なトランスフォームユニットテスト

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

ユニットテスト

Java Transforms は、CI チェックの一環としてユニットテストを実行できます。このページで説明する Java ユニットテストは、バッチパイプラインにのみ適用され、ストリーミングパイプラインでは利用できません。Java Transforms は現在、インタラクティブなユニットテストやデバッグに対応していません。ユースケースでこの機能が必要な場合は、代わりに Python Transforms の使用を検討してください。

Java トランスフォームのサブプロジェクトに com.palantir.transforms.lang.java-defaults プラグインを適用すると、デフォルトでユニットテスト環境がセットアップされます。このプラグインは、広く使われている Java ユニットテストライブラリの JUnit ↗、Mockito ↗、AssertJ ↗ を、サブプロジェクトの testCompile 設定に追加します。 Gradle がテストファイルを自動的に検出できるように、テストファイルは src/test/java 配下に配置してください。環境にプラグインを追加する方法の詳細については、Python テストの手順を参照してください。

Spark を使ってテストする

管理された SparkSession に簡単にアクセスできるように、JUnit5 の拡張機能と JUnit4 のルールを提供しています。

JUnit5 を使用している場合は、通常の拡張機能と同様に拡張機能を宣言します。

Copied!
1 2 3 4 5 import com.palantir.transforms.lang.java.testing.api.SparkSessionExtension; import org.junit.jupiter.api.extension.RegisterExtension; @RegisterExtension public static SparkSessionExtension sparkSession = new SparkSessionExtension();

JUnit4(現在は非推奨)を使用している場合は、テストファイルで SparkSession を ClassRule または Rule として宣言できます。以下に例を示します。

Copied!
1 2 3 4 5 import com.palantir.transforms.lang.java.testing.api.SparkSessionResource; import org.junit.ClassRule; @ClassRule public static SparkSessionResource sparkSession = new SparkSessionResource();
Copied!
1 2 3 4 5 import com.palantir.transforms.lang.java.testing.api.SparkSessionResource; import org.junit.Rule; @Rule public static SparkSessionResource sparkSession = new SparkSessionResource();

どちらの場合も、次のスニペットに示すように、テストで拡張機能またはルールを通常どおり使用できます。

Copied!
1 2 3 4 @Test public void myUnitTest() { SparkSession session = sparkSession.get(); }

JUnit4 では、ClassRule と Rule は異なります。SparkSession を ClassRule として宣言すると、テストクラス内のすべてのテストで同じ SparkSession が共有されます。これにより、SparkSession, の再作成にかかる時間を節約できますが、クラスパスは以前に実行されたテストから継承されます。 一方、SparkSession を Rule として宣言すると、テストごとに新しい独立した SparkSession が作成されます。1つのクラスに SparkSession を使用するテストが多数ある場合、パフォーマンスが大幅に低下する可能性があります。

Rule よりも ClassRule または JUnit5 の拡張機能を優先する

SparkSession を Rule として宣言すると、1つのクラスに SparkSession を使用するテストが多数ある場合、パフォーマンスが大幅に低下する可能性があります。そのため、可能な限り ClassRule を使用するか、JUnit4 のルールではなく JUnit5 の Extension を使用することを強く推奨します。