ユニットテストと結合テストの境界の知識マップ(知識グラフ)
type: Dataset
description: ユニットテストと結合テストの境界を、判断のテストか接続のテストかという軸で整理する記事です。金額計算や状態遷移のような分岐の総当たりはユニットテストへ寄せ、フォーマット・配線・環境・時間という4つの境界はin-memoryのfakeでは意味が落ちるため結合テストへ置くべきだとします。stub・mock・fakeというテストダブルの違いを整理したうえで、mockが増えすぎる兆候は配線をユニットテストへ押し込んでいる合図であり、コア層をユニットテストで厚く、境界層を狭い結合テストで、全体層を少数のスモーク/E2Eで構成する3層構成を実務での落としどころとして示します。

ユニットテスト
type: Concept
definition: 分離された1責務の正しさを、外部資源を切り離して確かめるテストの層のこと。
alternative label: Unit Test
alternative label: 単体テスト
recommended for: 分岐の総当たり
not recommended for: 配線の境界

結合テスト
type: Concept
definition: 複数コンポーネントの接続と、インフラやフレームワークを含む挙動を確かめるテストの層のこと。
alternative label: Integration Test
alternative label: 統合テスト
recommended for: フォーマットの境界
recommended for: 配線の境界
recommended for: 環境の境界
recommended for: 時間の境界
not recommended for: 分岐の総当たり

スタブ
type: Concept
definition: 既存の依存関係を置き換える、コントロール可能な代役のこと。決められた値を返すために使う。
alternative label: Stub

モック
type: Concept
definition: テストの合否を左右するAssert操作の対象になる、呼ばれ方そのものを検証する代役のこと。
alternative label: Mock

フェイク
type: Concept
definition: スタブやモックを指す総称、または本物と同じ振る舞いを軽い実装で置き換えたもののこと。
alternative label: Fake
not recommended for: 環境の境界
not recommended for: フォーマットの境界

フォーマットの境界
type: Concept
definition: JSON/XML/CSVのシリアライズやDBのスキーマ・mapping、文字コードなど、データ形式の変換に関わる境界のこと。
alternative label: Format Boundary

配線の境界
type: Concept
definition: DI登録、ルーティング、モデルバインディング、middlewareなど、実部品同士のつなぎ込みに関わる境界のこと。
alternative label: Wiring Boundary

環境の境界
type: Concept
definition: ファイル権限、COM登録、32bit/64bit、STA/MTAなど、OSや実行環境の実挙動に関わる境界のこと。
alternative label: Environment Boundary

時間の境界
type: Concept
definition: timeout、cancellation、retryの実挙動、race conditionなど、時間と並行性に関わる境界のこと。
alternative label: Time Boundary

分岐の総当たり
type: Concept
definition: クーポンの有無や在庫の有無など、条件分岐や入力パターンを網羅的に確認することのこと。
alternative label: Branching Coverage

bitness一致要件
type: Concept
definition: ネイティブモジュール(in-procのCOMコンポーネント、P/Invokeで呼ぶDLL、ベンダー提供SDKのDLLなど)を読み込むホストプロセスと、そのモジュールのビット構成(32bit/64bit)が一致していなければならないという制約。
alternative label: 32bit/64bitの一致
alternative label: bitness match

COMアパートメントモデル(STA/MTA)
type: Concept
definition: どのスレッドからCOMコンポーネントを呼んでよいかを決める、COMのスレッドモデルの約束。
alternative label: STA
alternative label: MTA
alternative label: Single/Multi Threaded Apartment
broader: com

mockが増えすぎる兆候
type: Concept
definition: mockが多数必要になる、setupが長い、arrangeが本体より長いなど、テストが読みにくくなっている兆候のこと。
alternative label: Mock Overuse Smell

3層のテスト構成
type: Concept
definition: コア層をユニットテストで厚く、境界層を狭い結合テストで、全体層を少数のスモーク/E2Eで構成するテストの配置構成のこと。
alternative label: コア層・境界層・全体層
requires: ユニットテスト
requires: 結合テスト
requires: E2Eテスト

E2Eテスト
type: Concept
definition: デプロイ済みアプリや複数サービス、実ブラウザーを通してアプリ全体のユーザーフローを確かめるテストの層のこと。
alternative label: 機能テスト
alternative label: End-to-End Test

subject: ユニットテスト
predicate: uses
object: スタブ
description: テスト対象を協力オブジェクトから切り離す必要がある場合、入力条件を固定するためにコントロール可能な代役であるstubを使う。純粋関数や値オブジェクトのユニットテストには代役自体が不要で、stub・mock・fakeは目的に応じて使い分ける選択肢である
evidence: unit-testing-best-practices
verified at: 2026-08-01
certainty: context-dependent

subject: ユニットテスト
predicate: uses
object: モック
description: 呼び出しが行われたこと自体をAssertの対象にしたい場合に、その検証のためmockを使う。純粋関数や値オブジェクトのユニットテストには代役自体が不要で、stub・mock・fakeは目的に応じて使い分ける選択肢である
evidence: unit-testing-best-practices
verified at: 2026-08-01
certainty: context-dependent

subject: ユニットテスト
predicate: uses
object: フェイク
description: 軽量な代替実装で足りる場合にfakeを使う(stubやmockの総称として使われることもある)。純粋関数や値オブジェクトのユニットテストには代役自体が不要で、stub・mock・fakeは目的に応じて使い分ける選択肢である
evidence: unit-testing-best-practices
verified at: 2026-08-01
certainty: context-dependent

subject: 結合テスト
predicate: recommendedFor
object: フォーマットの境界
description: JSON/CSVのシリアライズやDBのmappingなど、フォーマットの境界を確かめる主力として結合テストが本記事の推奨である
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: established

subject: 結合テスト
predicate: recommendedFor
object: 配線の境界
description: DI登録、ルーティング、モデルバインディングなど配線の境界を確かめる主力として結合テストが本記事の推奨である
evidence: https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/testing
verified at: 2026-08-01
certainty: established

subject: 結合テスト
predicate: recommendedFor
object: 環境の境界
description: ファイル権限、COM登録、32bit/64bit、STA/MTAなど環境の境界を確かめる主力として結合テストが本記事の推奨である
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: established

subject: 結合テスト
predicate: recommendedFor
object: 時間の境界
description: 実際にtimeoutが効くか、cancellationが伝播するかなど時間の境界を確かめる主力として結合テストが本記事の推奨である
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: established

subject: ユニットテスト
predicate: recommendedFor
object: 分岐の総当たり
description: クーポンあり/なし、在庫あり/なしのように分岐条件が増える入力パターンの総当たりには、ユニットテストが本記事の推奨である
evidence: unit-testing-best-practices
verified at: 2026-08-01
certainty: established

subject: 環境の境界
predicate: requires
object: bitness一致要件
description: 環境の境界には、32bit/64bitのビット数一致という制約の確認が含まれる(ファイル権限やCOM登録など他の懸念も環境の境界に含まれ、bitnessはそのうちの1つの例に過ぎない)
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: context-dependent

subject: 環境の境界
predicate: requires
object: COMアパートメントモデル(STA/MTA)
description: 環境の境界には、STA/MTAのようなCOMのアパートメントモデルの確認が含まれる(COMやActiveXを含む構成の場合の例であり、環境の境界すべてにCOMアパートメントモデルが関わるわけではない)
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: context-dependent

subject: モック
predicate: mayCause
object: mockが増えすぎる兆候
description: mockによる呼び出し検証をユニットテストに積み重ねすぎると、mockが増えすぎる兆候につながることがある
evidence: unit-testing-best-practices
verified at: 2026-08-01
certainty: context-dependent

subject: ユニットテスト
predicate: notRecommendedFor
object: 配線の境界
description: DI登録やモデルバインディングなど配線の境界を、mockを積み重ねたユニットテストで確かめようとすることは、本物との接続の証明にならないため推奨されない
evidence: https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/testing
verified at: 2026-08-01
certainty: established

subject: 3層のテスト構成
predicate: requires
object: ユニットテスト
description: 3層のテスト構成のコア層は、業務ルールや状態遷移をユニットテストで厚く持つ
evidence: unit-testing-best-practices
verified at: 2026-08-01
certainty: established

subject: 3層のテスト構成
predicate: requires
object: 結合テスト
description: 3層のテスト構成の境界層は、DBやファイル、serializer、DIなどに狭い結合テストを置く
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: established

subject: 3層のテスト構成
predicate: requires
object: E2Eテスト
description: 3層のテスト構成の全体層は、起動確認や主要フローを少数のスモーク/E2Eで押さえる
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: established

subject: 結合テスト
predicate: notRecommendedFor
object: 分岐の総当たり
description: 結合テストで入力パターンを総当たりすることは重くなりすぎるため推奨されず、代表的なシナリオへ絞ることが勧められている
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: established

subject: フェイク
predicate: notRecommendedFor
object: 環境の境界
description: in-memoryのfakeではファイル権限やCOM登録、32bit/64bitなど環境の境界の意味がかなり落ちるため、fakeをこの確認に用いることは推奨されない
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: established

subject: フェイク
predicate: notRecommendedFor
object: フォーマットの境界
description: wire formatのズレはfakeでは見つけにくいため、fakeをフォーマットの境界の確認に用いることは推奨されない
evidence: https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests
verified at: 2026-08-01
certainty: established