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

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

ユニットテスト

Java トランスフォームは CI チェックの一環としてユニットテストを実行することをサポートしています。

Java トランスフォームは現在、対話型のユニットテストやデバッグをサポートしていません。ユーザーのユースケースでこの機能が必要な場合は、代わりに Pythonトランスフォーム を使用することを検討してください。

このページで説明する Java ユニットテストはバッチパイプラインにのみ適用され、ストリーミングパイプラインには対応していません。

ユニットテスト環境は、com.palantir.transforms.lang.java-defaults プラグインを Java トランスフォームのサブプロジェクトに適用するとデフォルトで設定されます。これにより、サブプロジェクトの testCompile 構成に人気のある Java ユニットテストライブラリ JUnit ↗, Mockito ↗ および AssertJ ↗ が追加されます。 テストファイルは src/test/java に配置すると、Gradle が自動的に認識します。環境にプラグインを追加する方法の詳細については Python Tests の手順を参照してください。

Spark を使用したテスト

管理された SparkSession に簡単にアクセスできるようにするために、JUnit5 エクステンションと JUnit4 ルールを提供しています。

JUnit5 を使用している場合、通常のエクステンションと同じようにエクステンションを宣言します。

Copied!
1 2 3 4 5 6 7 import com.palantir.transforms.lang.java.testing.api.SparkSessionExtension; import org.junit.jupiter.api.extension.RegisterExtension; @RegisterExtension public static SparkSessionExtension sparkSession = new SparkSessionExtension(); // SparkSessionExtensionのインスタンスをJUnitのテスト拡張機能として登録

JUnit4 (現在は非推奨)を使用している場合、テストファイル内でSparkSessionClassRuleまたは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(); // SparkSessionResourceのインスタンスを作成
Copied!
1 2 3 4 5 6 import com.palantir.transforms.lang.java.testing.api.SparkSessionResource; import org.junit.Rule; @Rule public static SparkSessionResource sparkSession = new SparkSessionResource(); // SparkSessionResourceを使用してSparkセッションを作成し、JUnitのテストルールとして設定する

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

Copied!
1 2 3 4 5 @Test public void myUnitTest() { // SparkSessionオブジェクトを取得する SparkSession sparkSession = sparkSession.get(); }

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

警告

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