注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Java トランスフォームは CI チェックの一環としてユニットテストを実行することをサポートしています。
Java トランスフォームは現在、対話型のユニットテストやデバッグをサポートしていません。ユーザーのユースケースでこの機能が必要な場合は、代わりに Pythonトランスフォーム を使用することを検討してください。
このページで説明する Java ユニットテストはバッチパイプラインにのみ適用され、ストリーミングパイプラインには対応していません。
ユニットテスト環境は、com.palantir.transforms.lang.java-defaults
プラグインを Java トランスフォームのサブプロジェクトに適用するとデフォルトで設定されます。これにより、サブプロジェクトの testCompile
構成に人気のある Java ユニットテストライブラリ JUnit ↗, Mockito ↗ および AssertJ ↗ が追加されます。
テストファイルは src/test/java
に配置すると、Gradle が自動的に認識します。環境にプラグインを追加する方法の詳細については Python Tests の手順を参照してください。
管理された 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 (現在は非推奨)を使用している場合、テストファイル内で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(); // 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 では ClassRule
と Rule
は異なることに注意してください。SparkSession
を ClassRule
として宣言すると、同じ SparkSession
がテストクラス内のすべてのテストで共有されます。これにより SparkSession
の再作成にかかる時間を節約できますが、クラスパスは以前に実行されたテストから引き継がれます。
これに対して、SparkSession
を Rule
として宣言すると、各テストごとに新しい独立した SparkSession
が取得されます。これにより、1 つのクラス内で多くのテストが SparkSession
を使用している場合、パフォーマンスが大幅に低下する可能性があります。
SparkSession
を Rule
として宣言すると、1 つのクラス内で多くのテストが SparkSession
を使用している場合にパフォーマンスが大幅に低下する可能性があります。そのため、可能な限り ClassRule
を使用するか、JUnit4 のルールではなく JUnit5 の Extension
を使用することを強くお勧めします。