生成コードのテストとは
テストとは、関数に決まった入力を与えて、期待する答えが返るかを調べる小さなプログラムです。AIアシスタントが書いたコードも、使う前にテストで確かめます。
読んで正しく見えても、特別な入力で壊れるコードは多くあります。テストは、その壊れ方を先に見つけます。
このレッスンのゴール
メモ
使う前に、例と端の場合を使って、テストを書ける。
今日のキーワード
| ことば | いみ | れい |
|---|---|---|
| テストケース | 入れる値と、期待する答えの1組です。 | |
| 期待値 | 正しければ返るはずの答えです。 | |
| 境界値 | 結果が変わる境目と、その前後の値です。 | 999, 1000, 1001 |
| 端の場合 | 空やゼロなど、ふつうでない入力です。 | |
| 回帰テスト | 直したあとに、前のテストを動かし直すことです。 |
学生が入力するセルは、このプレビューでは空白です。
先に期待値を決めてから動かす
テストで大切なのは、答えを見る前に、期待値を自分で決めておくことです。答えを見てから決めると、出た値を正しいと思い込みます。
次のコードは、「1000円以上で1割引」と頼んで返ってきたものと考えます。
1000円の割引を確かめる
def lunch_price(price):
# 1000円以上なら1割引にする、という頼みでした。
if price > 1000:
return price * 9 // 10
return price
print(lunch_price(1500))
print(lunch_price(1000))
# 1000円ちょうどの期待値は何でしょうか。出た値と比べます。
境界値の選び方
| 入れる値 | 期待値 | ねらい |
|---|---|---|
| 999 | 999 | 境目の1つ下 |
| 1000 | 900 | 境目ちょうど |
| 1001 | 900 | 境目の1つ上 |
学生が入力するセルは、このプレビューでは空白です。
空や、ありえない値でも試す
もう1つの攻めどころが、端の場合です。空の入力、ゼロ、マイナス、表にない名前を、わざと入れます。
次の Run は、ラボの売店のコードに、表にない商品とマイナスの金額を渡して表示します。何も変えず、見るだけです。最初の状態では、£-0.20 と undefined が出ます。
端の場合を表示する
docker exec -w /home/node/project agent node -e 'const s = require("./shop"); console.log(s.asPounds(-20), s.total(["tea"]))'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
「テストが全部通ったから、コードは正しい」と考える人がいます。通ったのは、書いたケースの範囲だけです。書いていない入力は、まだ誰も確かめていません。
直したら、全部のテストを動かし直す
コードを1か所直すと、別の場所が壊れることがあります。直したあとは、前のテストも全部動かし直します。これを回帰テストと呼びます。
ラボには5つのテストがあります。次の Run で動かすと、最初の状態では4つが通り、1つが失敗します。
ラボのテストを動かす
docker exec -w /home/node/project agent node --testここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。