Python によるテスト入門

Pythonによるテスト入門

Alexander Levin

Data Scientist

なぜテストは重要か

一般的な問題:

  • バグやエラー
  • ハードウェア障害
  • 予期せぬ挙動

これらは修正のための大きな費用増につながり得ます。

テストの効果:

  • 欠陥・バグ・エラーの特定
  • 障害リスクの低減
  • 信頼性・機能性・性能の向上
Pythonによるテスト入門

テストとは

  • テスト — システムやソフトウェアを評価するプロセス
  • 仕様を満たすことを確認するために必要です

  • テスト(試験) — ソフトウェアやシステムの正しさを検証する手順

Pythonによるテスト入門

受講前提

  • 進んだ Python プログラミング
  • assert
  • デコレータ
  • OOP 概念(クラス、メソッド、継承)
Pythonによるテスト入門

身近なテストの例

飛行機を考えてみましょう:

  • 目視点検
  • 電子・機械の点検
  • 燃料の確認
  • 乗客の確認
  • 天候の確認
  • 管制官からの離陸許可

これらはすべてテストであり、安全のために必要です。

離陸前の航空機

Pythonによるテスト入門

Python の assert

  • assert conditionconditionTrue かをテストします。
  • conditionFalse の場合、Python は AssertionError を送出します。
Pythonによるテスト入門

pytest によるテスト - 例

pytest — Python の代表的なテストフレームワーク。シンプルにテストを書けます。

pytest を用いた「assert」テストの例:

import pytest

# テスト対象関数
def squared(number):
    return number * number

# テスト関数は "test" で始める
def test_squared():
    assert squared(-2) == squared(2)
Pythonによるテスト入門

コンテキストマネージャ復習

  • コンテキストマネージャwith 文で利用する Python オブジェクト
  • 一時的なコンテキストの設定と後処理に使います
# ファイル書き込みの例
with open("hello_world.txt", 'w') as hello_file:
    hello_file.write("Hello world \n")
Pythonによるテスト入門

pytest: raises を使う

pytest.raises — 例外の送出を期待するテストに使います

import pytest

# テスト対象関数
def division(a, b):
    return a / b

# テスト関数
def test_raises():
    with pytest.raises(ZeroDivisionError):
        division(a=25, b=0)
Pythonによるテスト入門

まとめ

テストとは:

  • ソフトウェアが期待どおり動くかを評価するプロセス
  • 日常でも行われます
  • 開発の課題に対処するために不可欠
  • 問題が適切に扱われるよう支援

テストの実装:

  • pytest — 強力な Python フレームワーク。テストを簡素化
  • assert — 条件の検証で基本的なテストを作成する Python キーワード
  • pytest.raises — 例外発生を期待するテスト用のコンテキストマネージャ
Pythonによるテスト入門

Ayo berlatih!

Pythonによるテスト入門

Preparing Video For Download...