unit-test-mapper-converter
マッパー・コンバーター・Beanマッピングのユニットテストパターンを提供し、エンティティからDTOへの変換やモデル変換ロジックを独立した形で検証します。MapStructおよびカスタムコンバーターのテストカバレッジを含む実行可能なマッピングテストを生成します。マッピングテストやコンバーターテストの作成、またはDTOとドメインオブジェクト間のデータ変換の正確性を確認する際にご利用ください。
description の原文を見る
Provides patterns for unit testing mappers, converters, and bean mappings. Validates entity-to-DTO and model transformation logic in isolation. Generates executable mapping tests with MapStruct and custom converter test coverage. Use when writing mapping tests, converter tests, entity mapping tests, or ensuring correct data transformation between DTOs and domain objects.
SKILL.md 本文
マッパーとコンバーターのユニットテスト
概要
MapStruct マッパーとカスタムコンバータークラスのユニットテストパターンを提供します。フィールドマッピングの正確性、null ハンドリング、型変換、ネストされたオブジェクト変換、双方向マッピング、enum マッピング、部分更新に対応しています。
使用時期
- MapStruct マッパー実装のマッピングテストを作成する場合
- カスタムエンティティから DTO へのコンバーターと Bean マッピングをテストする場合
- ネストされたオブジェクトマッピングとコレクション変換を検証する場合
手順
1. 生成されたマッパークラスを検証する
テストの前に、生成されたマッパークラスが存在することを確認してください:
# Maven
ls target/generated-sources/
# Gradle
ls build/generated/sources/
生成されたクラスが見つからない場合:
mvn compile(Maven)または./gradlew compileJava(Gradle)を実行する- MapStruct アノテーションプロセッサが設定されていることを確認する
@Mapperインターフェースがコンパイル済みソースセットにあることを確認する
2. Null ハンドリングをテストする
assertThat(mapper.toDto(null)).isNull();
null が空またはデフォルト値を返す場合は、マッパーで nullValueMappingStrategy を設定してください。
null テストが失敗する場合:
@MapperにnullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULLを追加する- またはネストされたプロパティハンドリングに
nullValuePropertyMappingStrategyを使用する
3. 双方向マッピングをテストする
User restored = mapper.toEntity(mapper.toDto(original));
assertThat(restored).usingRecursiveComparison().isEqualTo(original);
双方向マッピングテストが失敗する場合:
@Mappingアノテーションのフィールド名の不一致を確認する- 自動マッピングが失敗する場合は両方向を明示的にマッピングされていることを確認する
unmappedTargetPolicy = ReportingPolicy.ERRORを使用して不足しているマッピングを検出する
4. ネストされたオブジェクトマッピングをテストする
assertThat(dto.getNested()).usingRecursiveComparison().isEqualTo(expected);
ネストされたテストが失敗する場合:
- ネストされたマッパーが存在すること、または
uses = NestedMapper.classで参照されていることを確認する elementMappingStrategyでコレクション要素マッピングを確認する
5. カスタム式をテストする
@Mapping(target = "field", expression = "java(...)") のカスタム式はコンパイル時に検証されません。
式テストが失敗する場合:
- 式の構文とメソッドシグネチャを確認する
- インポートされたクラスが式コンテキストからアクセス可能なことを確認する
6. Enum マッピングをテストする
enum から enum への変換には @ValueMapping を使用します。すべての enum 値を徹底的にテストしてください。
ベストプラクティス
- スタンドアロンテストには
Mappers.getMapper()を使用し、統合テストには Spring インジェクションを使用する - 複雑なネストされた構造には
usingRecursiveComparison()を使用する - コレクション変換を含むすべてのマッパーメソッドをテストする
- すべての nullable ソースフィールドの null ハンドリングを検証する
- 双方向マッピングテストは entity→DTO と DTO→entity の間の非対称性を検出する
- マッパーテストを変換の正確性に焦点を当て、実装詳細ではなく保つ
制約と警告
- コンパイル時生成: MapStruct はコンパイル時にコードを生成します。テスト実行前に生成されたクラスが存在することを確認してください
- Null ハンドリング:
nullValueMappingStrategyとnullValuePropertyMappingStrategyを適切に設定してください - 式の検証:
@Mappingの式はコンパイル時に検証されません。明示的にテストしてください - 循環依存: MapStruct はマッパー間の循環依存を処理できません
- コレクション不変性: 不変コレクションのマッピングは特別な設定が必要な場合があります
- 日付/時刻: 日付/時刻オブジェクトがタイムゾーン間で正しくマッピングされることを確認してください
例
インポート付きの完全な実行可能テスト:
package com.example.mapper;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import static org.assertj.core.api.Assertions.*;
class UserMapperCompleteTest {
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
@Test
void shouldMapUserToDto() {
User user = new User(1L, "Alice", "alice@example.com", 25);
UserDto dto = mapper.toDto(user);
assertThat(dto)
.isNotNull()
.extracting(UserDto::getName, UserDto::getEmail)
.containsExactly("Alice", "alice@example.com");
}
@Test
void shouldMaintainRoundTrip() {
User original = new User(1L, "Alice", "alice@example.com", 25);
assertThat(mapper.toEntity(mapper.toDto(original)))
.usingRecursiveComparison()
.isEqualTo(original);
}
@Test
void shouldHandleNullInput() {
assertThat(mapper.toDto(null)).isNull();
}
}
その他の例は references/examples.md を参照してください
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- giuseppe-trisciuoglio
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。