単体テストと結合テストの違いは何ですか

確かめる範囲、速さ、壊れたときの場所の分かりやすさで答える問い。両方をどんな割合で持つかまで話せると伝わります。

こう聞かれます

  • 「単体テストと結合テストの違いは何ですか」
  • 「単体テストが全部通っているのに、画面で動かないことはありますか」(裏から聞く形)
  • 「テストは、どの種類をどれくらい書きますか」

面接官が見ている点

  • 違いを「確かめる範囲」で説明できるか
  • 速さと、壊れたときに場所を絞りやすいか、の釣り合いで話せるか
  • 単体だけ、結合だけでは足りない理由を言えるか

短い答え

  • 単体テストは、1 つの関数のような小さな部品だけを切り出して、決めた入力で答えが合うかを確かめます。
  • 結合テストは、部品どうしや、データベースのような外の物とつないだときに、正しく受け渡しできるかを確かめます。
  • 単体は速くて壊れた場所が分かりやすいので数を多くし、つなぎ目は結合テストで要所だけを確かめます。

少し詳しい答え

同じ処理を、2 つの範囲で試す

合計を出す関数と、その結果を保存する関数があるとします。保存先は、ここでは Map で代わりにしています。

JavaScript

function total(items) {
  let sum = 0;
  for (const it of items) {
    sum += it.price * it.qty;
  }
  return sum;
}

const saved = new Map();
function order(id, items) {
  saved.set(id, total(items));
  return saved.get(id);
}

const cart = [
  { price: 300, qty: 2 },
];
console.log(total(cart));
console.log(total([]));
console.log(order("A", cart));
console.log(saved.has("A"));
600
0
600
true

上の 2 行は total だけを試す単体テストの考え方で、空の買い物かごのような端の値も一瞬で確かめられます。下の 2 行は、計算と保存をつないで、保存先に正しく入ったかまで見る結合テストの考え方です。本物のデータベースにつなぐと、準備と片付けが要るぶん遅くなります。

釣り合いの取り方

  • 単体テスト速く、落ちたときに原因の場所がすぐ分かる。ただし、部品のつなぎ目の食い違い (渡す値の形の違いなど) は見つけられない
  • 結合テストつなぎ目の食い違いや、データベースの決まり (重複を許さない、など) まで確かめられる。ただし遅く、落ちたときに原因を探す範囲が広い

単体テストを多めに、結合テストを要所に、画面を通しての確かめを少しだけ、という割合がよく使われます。

作った物と結ぶなら、たとえば「金額の計算は単体テストで端の値まで試し、注文を保存する API は手元のデータベースにつないだ結合テストで 1 本通していました」のように話します。

よくある間違い

  • 「単体テストが通れば、全体も動く」と言う部品が正しくても、渡す値の形が食い違えば動きません。つなぎ目は結合テストで見ます
  • 全部を画面からの確かめで済ませる遅く、落ちたときにどこが悪いか分かりにくいので、細かい決まりは単体テストで押さえます
  • 違いを「小さいか大きいか」だけで答える何をつないで確かめるのか、範囲で説明します

深掘りの問い

  • 「外の API を呼ぶ処理を、単体で試すには」 呼ぶ部分を外から渡せる形にし、試すときは決まった答えを返す偽物に差し替える、と答えます
  • 「テストが遅くなってきたら、どうしますか」つなぐ必要の無い確かめを単体テストへ移し、結合テストは要所に絞る、と答えます
  • 「結合テストでデータベースを使うとき、気をつけることは」 テストごとにデータを用意して片付け、前のテストの残りに左右されないようにする、と答えます

確認日 2026年10月23日

技術面接問題の一覧へ戻る