0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

junit 規約 コーディングルール java テスト設計

Posted at

テスト設計ガイドライン(一般向け)

目的とスコープ

  • 対象機能の振る舞いを公開インターフェース経由で検証し、内部実装に依存しない堅牢なテストとする
  • 外部依存(ネットワーク、ストレージ、設定、認証)はすべてスタブ/モックで置換し、再現性と速度を最優先

原則

  • 公開API優先: 非公開の実装詳細(private)に依存しない
  • 反射禁止: private呼び出しや実装隠蔽の破り込みを行わない
  • シナリオ駆動: 代表的なユースケースと境界条件で網羅し、過剰な組み合わせ爆発は避ける
  • 安定比較: 比較対象は意味のある最小限に正規化(非本質データは比較しない)

外部依存とテストデータ

  • 外部クライアントや設定値はモック/フェイクで注入する
  • 版管理や履歴があるデータは「最新」「直前」「削除マーカー」等の最小構成で時系列を再現する
  • バイト列やレスポンスストリームは、サイズ情報やメタデータを持つ擬似オブジェクトで表現する

比較の正規化

  • 比較対象を用途に応じて正規化する(例: 主キー・名称・フラグのみ)
  • テキスト本文・画像データ・サイズ・インデックス等の非本質フィールドは原則比較から外す
  • 並び順の意味がある場合は順序も含めて検証する

コンテンツ種別の扱い

  • 画像: 表示用データURIやBase64は同一性のみに利用し、重い本文は比較しない
  • バイナリ: ヌルバイト検知やサイズ上限で「バイナリ扱い」へフォールバックする経路を検証
  • テキスト: 文字コード検出→行分割→差分生成の流れを代表ケースで通す(検出器のヒューリスティック全網羅は求めない)

サイズ上限とストリーミング

  • サイズ閾値超過時は本文読取を回避し、フォールバック動作を検証
  • ストリームの長さやヘッダ情報で事前判定できる経路を再現し、不要なI/Oを避ける

履歴・状態フラグ

  • 「履歴不在」や「履歴が一方のみ」などの状態フラグは、入力構成で自然に誘発させて検証
  • フィルタ条件(対象外判定)と例外時のフォールバック(履歴不在・バイナリDTO)を区別してカバー

階層リソース(ディレクトリ/グループ vs ファイル/葉)

  • 階層キーは末尾区切りなどの約束で判定し、グループ指定時は配下リソースへ展開
  • メタ情報のみが必要な経路(例: 種別判定や登録区分算出)は本文取得を行わない最小実行にする

アルゴリズムのカバレッジ

  • 差分や探索ロジックなどの分岐は、入力の「長さ・一致/不一致・奇偶・差分量」を操作して代表パスを通す
  • 内部最適化や補助関数(剰余調整など)は、公開APIを通して間接的に到達可能な範囲で検証する

例外シミュレーション

  • 読取/解析/変換の各段で例外を発生させ、フォールバック経路(履歴不在・バイナリ扱い等)を確認
  • 例外源はコンストラクションモックやスタブ関数で局所的に与え、過度な副作用を避ける

テスト構成と命名

  • 1テスト1意図を徹底し、期待される振る舞いを自然言語で明確に記述
  • 前準備(Arrange)・実行(Act)・検証(Assert)を簡潔に分離
  • ヘルパはテスト内に自己完結的に置き、外部の隠れ依存を作らない

避けるべきこと

  • private実装への依存(反射・内部状態の直接参照)
  • 重い本文やメディアの生比較(正規化なし)
  • 実ネットワーク/実ストレージへの依存、長時間I/O
  • 多数の断片的アサーションによる脆いテスト(本質に絞る)

代表シナリオ例(抽象)

  • グループキー指定で配下展開(メタのみ/本文ありの両経路)
  • 版一覧が空・削除混在・最新のみ/旧のみの境界
  • サイズ閾値超過・バイナリ検出・画像同一性
  • 等価テキスト・微差分・大差分・行数の非対称
  • 最新/旧版の片側での読取失敗とフォールバック

メンテナンス指針

  • 仕様変更時は「意図を表すテスト名」と「最小の期待」から見直す
  • 新たな分岐は入力の組合せで到達可能かをまず検討(APIの拡張より先にテストデータ設計)
  • 実行速度と独立性を定期的にモニタし、遅延要因(不要I/O・重比較)を排除する

以上の規約に従うことで、速度・再現性・保守性に優れたテスト群を維持しつつ、実装詳細に縛られない堅牢な品質保証を実現します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?