こう 聞かれます
- 「単体テストと
結合 テストの 違いは 何ですか」 - 「単体テストが
全部通っているのに、 画面で 動かない ことは ありますか」 (裏から聞く形) - 「テストは、
どの 種類を どれくらい 書きますか」
面接官が 見ている点
- 違いを
「確かめる範囲」で 説明できるか - 速さと、
壊れた ときに 場所を 絞りやすいか、の 釣り合いで話せるか - 単体だけ、
結合だけでは 足りない 理由を言えるか
短い答え
- 単体テストは、
1 つの 関数のような 小さな 部品だけを 切り出して、 決めた 入力で 答えが 合うかを 確かめます。 - 結合
テストは、 部品どうしや、 データベースのような 外の 物と つないだときに、 正しく 受け渡しできるかを 確かめます。 - 単体は
速くて 壊れた 場所が 分かりやすいので 数を 多くし、 つなぎ目は 結合 テストで 要所だけを 確かめます。
少し 詳しい答え
同じ 処理を、 2 つの 範囲で試す
合計を
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 だけを
釣り合いの取り方
- 単体テスト速く、
落ちた ときに 原因の 場所が すぐ 分かる。 ただし、 部品の つなぎ目の 食い 違い (渡す値の 形の 違いなど ) は 見つけられない - 結合テストつなぎ目の
食い 違いや、 データベースの 決まり (重複を 許さない、など ) まで 確かめられる。 ただし遅く、 落ちた ときに 原因を 探す範囲が広い
単体テストを
作った
よく ある間違い
- 「単体テストが
通れば、 全体も 動く」と言う 部品が 正しくても、 渡す値の 形が 食い 違えば 動きません。 つなぎ目は 結合 テストで見ます - 全部を
画面からの 確かめで済ませる 遅く、 落ちた ときに どこが 悪いか 分かりにくいので、 細かい 決まりは 単体テストで 押さえます - 違いを
「小さいか大きいか」だけで答える 何を つないで 確かめるのか、 範囲で 説明します
深掘りの問い
- 「外の API を
呼ぶ処理を、 単体で 試すには」 呼ぶ部分を 外から 渡せる 形にし、 試すときは 決まった 答えを 返す偽物に 差し替える、と答えます - 「テストが
遅くなってきたら、 どうしますか」つなぐ 必要の 無い 確かめを 単体テストへ 移し、 結合 テストは 要所に 絞る、と答えます - 「結合
テストで データベースを 使う とき、 気を つけることは」 テストごとに データを 用意して 片付け、 前の テストの 残りに 左右されないように する、と答えます