DB Tester仕様 - サービスプロバイダーインターフェース(SPI)
SPIアーキテクチャ
本フレームワークはモジュール間の疎結合のためにJava ServiceLoaderを使用します。
設計原則
- API独立性: テストフレームワークモジュールは
db-tester-apiのみに依存する。 - ランタイム検出: ServiceLoaderがCore実装をランタイムに読み込む。
- 拡張性: カスタム実装を登録するとデフォルトを置換できる。
2層SPIアーキテクチャ
本フレームワークは、フレームワーク向けの関心事と実装の詳細を分離する2層SPIアーキテクチャを使用します。
Tier 1 -- サポートレイヤー: テストフレームワークエクステンション(JUnit、Spock、Kotest)が読み込む高レベルのライフサイクルSPIです。各Supportインターフェースはテストライフサイクルの1フェーズ(準備、検証、エクスポート)をカプセル化し、アノテーションとコンテキストパラメータを受け取ります。
Tier 2 -- プロバイダーレイヤー: db-tester-coreのSupport実装が読み込む低レベルの操作SPIです。Providerインターフェースは細粒度のデータベース操作(SQL実行、データセット比較、ファイルエクスポート)を定義します。
スタンドアロンSPI: 2層パターンに属さないSPIは以下のとおりです。
DataSetLoaderProvider-- デフォルトデータセットローダーを提供するためにConfiguration.defaults()から読み込まれるScenarioNameResolver-- コアのシナリオ解決インフラストラクチャから読み込まれるTypeHandler-- カスタムデータベース型処理のためにTypeHandlerRegistryから読み込まれるFormatProvider-- ファイル形式解析のためにFormatRegistryから読み込まれる内部SPI
サポートレイヤー
PreparationSupport
テストライフサイクル中にデータベース準備操作を実行します。
パッケージ: io.github.seijikohara.dbtester.api.spi.PreparationSupport
インターフェース:
public interface PreparationSupport {
void execute(TestContext context, DataSet dataSet);
}デフォルト実装: db-tester-coreのDefaultPreparationSupport
読み込み元: テストフレームワークエクステンション(JUnitのPreparationExecutor、SpockのDatabaseTestInterceptor、KotestのDatabaseTestExtension)
内部で使用: OperationProvider(Tier 2)をServiceLoader経由で使用
パラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
context | TestContext | 設定、レジストリ、テストメタデータを含むテストコンテキスト |
dataSet | DataSet | 準備設定を含む@DataSetアノテーション |
ExpectationSupport
テストライフサイクル中にデータベース期待値検証を実行します。
パッケージ: io.github.seijikohara.dbtester.api.spi.ExpectationSupport
インターフェース:
public interface ExpectationSupport {
void verify(TestContext context, ExpectedDataSet expectedDataSet);
}デフォルト実装: db-tester-coreのDefaultExpectationSupport
読み込み元: テストフレームワークエクステンション(JUnitのExpectationVerifier、SpockのDatabaseTestInterceptor、KotestのDatabaseTestExtension)
内部で使用: ExpectationProviderとAssertionProvider(Tier 2)
パラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
context | TestContext | 設定、レジストリ、テストメタデータを含むテストコンテキスト |
expectedDataSet | ExpectedDataSet | 検証設定を含む@ExpectedDataSetアノテーション |
スロー: 設定済みリトライ回数を超えても検証が失敗した場合、ValidationExceptionをスローする。
ExportSupport
テスト実行後にデータベース状態をエクスポートします。
パッケージ: io.github.seijikohara.dbtester.api.spi.ExportSupport
インターフェース:
public interface ExportSupport {
void export(TestContext context, ExportDataSet exportDataSet);
}デフォルト実装: db-tester-coreのDefaultExportSupport
読み込み元: テストフレームワークエクステンション(JUnitのExportExecutor、SpockのDatabaseTestInterceptor、KotestのDatabaseTestExtension)
内部で使用: ExportProvider(Tier 2)をDataSetExporter経由で使用
パラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
context | TestContext | 設定、レジストリ、テストメタデータを含むテストコンテキスト |
exportDataSet | ExportDataSet | エクスポート設定を含む@ExportDataSetアノテーション |
SPIリファレンスページ
| ページ | 説明 |
|---|---|
| SPIプロバイダー | プロバイダーレイヤーのインターフェース: OperationProvider、AssertionProvider、ExpectationProvider、ExportProvider、TypeHandlerなど |
| SPI登録 | ServiceLoader登録、JPMSモジュール宣言、カスタム実装 |
関連仕様
- 概要 - フレームワークの目的と主要概念
- アーキテクチャ - モジュール構造
- 設定 - 設定クラス
- テストフレームワーク - フレームワーク統合