クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

関数を確かめるテストを書く

このレッスンのあとで: 関数が正しく動くかを確かめるテストを書くことができます。

50分のレッスンコマンドなし

金曜日の小さな変更

ある通販会社で、金曜日の夕方に1行だけコードが変わりました。月曜日の朝、数百人のお客さまに、間違った金額の請求書が届きました。

変更はとても小さく、誰も確かめませんでした。3行のテストがあれば、公開の前に気づけたはずです。

このレッスンのゴール

メモ

関数が正しく動くかを確かめるテストを書くことができます。

キーワード

ことばいみれい
テストコードが正しく動くかを確かめるコードです。test_exactly_hundred
assert正しくないときに、プログラムを止める命令です。assert total == 1500
期待する値関数が返すべき値です。
実際の値関数が本当に返した値です。
境界の値ルールが切り替わる、ちょうどの値です。100個

学生が入力するセルは、このプレビューでは空白です。

テストは期待と実際を比べる

テストのすることは、いつも同じです。決まった値で関数を呼び、返ってきた値を、返るべき値と比べます。

比べるには assert を使います。比べた結果が正しければ、何も起きずに先へ進みます。正しくなければ、AssertionError でプログラムが止まります。

実行: ポイントのテスト

コード: python
def points_for(amount):
    # コンビニのポイント: 100円ごとに1ポイントです。
    return amount // 100


expected = 5
actual = points_for(560)
print("期待する値:", expected, "実際の値:", actual)
assert actual == expected
print("テストに合格しました")

バグは境界にかくれる

ネットスーパーの送料は、5000円で切り替わります。5000円以上なら無料、それ未満なら500円です。

3000円と8000円を確かめるのは良いことです。でも、それだけでは足りません。よくあるバグは、ちょうど境界にあります。>= を > と書くような間違いです。

だから、良いテストは必ず切り替わる値そのものを確かめます。

例: どの値を確かめるか

注文の金額期待する送料確かめる理由
3000円500円よくある注文
4999円500円境界のすぐ下
5000円0円ちょうど境界
8000円0円大きな注文

学生が入力するセルは、このプレビューでは空白です。

練習: 境界を確かめる

コード: python
def shipping_fee(total):
    # ネットスーパー: 5000円以上の注文は送料無料、それ未満は送料500円です。
    # 誰かが >= を > と書いてしまいました。
    if total > 5000:
        return 0
    return 500


assert shipping_fee(3000) == 500
print("3000円の注文: 合格")
assert shipping_fee(8000) == 0
print("8000円の注文: 合格")

# ちょうど5000円の注文を確かめる assert を、この下に1行足してください。
# 送料はいくらのはずですか。実行して、何が起きるかを見てください。

よくある誤解

注意

「テストが全部通れば、コードにバグはない」と考える人は多いです。テストが示すのは、確かめた値で正しく動くことだけです。境界を誰も確かめていなければ、バグは残ります。まだ確かめていない値はどれか、いつも考えましょう。

テストは test_ で始まる関数

仕事のプロジェクトでは、テストを一つずつ関数にします。名前は test_ で始めます。

pytest のような道具が、その関数を全部見つけて実行し、失敗したものを教えてくれます。

名前には、何を確かめるかを書きます。test_exactly_hundred なら、失敗したときに見る場所がすぐわかります。

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。