組み込み開発のためのPython · レッスン 204 / 220

unittestでハードウェアなしの試験を作る

境界値・異常系を試験し、実機に接続する前にデータ処理を検証します。

プロトコルの変換や範囲検査の多くは、実機がなくても試験できます。期待する動作をコードで残せば、修正後の再確認や他の環境での再現が容易になります。

成功だけでなく境界と失敗も試す

通常値に加え、最小・最大・空・切り詰め・形式違いを試験します。異常入力に対して例外を出す設計なら、例外の種類も確認できます。試験名には条件と期待結果を書き、何が失敗したのかを出力から理解できるようにします。

機器アクセスとロジックを分離する

デコードや範囲検査の関数がシリアルポートを直接開かないようにすると、単体試験が速く安定します。実機が必要な試験は、別の統合試験として識別します。仮の入力データは仕様に沿って作成し、実機試験の代わりになると誤解しないようにします。

コード例

手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。

import unittest


def decode_byte(raw: bytes) -> int:
    if len(raw) != 1:
        raise ValueError("1バイト必要です")
    return raw[0]


class DecodeTests(unittest.TestCase):
    def test_decodes_unsigned_byte(self):
        self.assertEqual(decode_byte(b"\xff"), 255)

    def test_rejects_empty_input(self):
        with self.assertRaises(ValueError):
            decode_byte(b"")

手を動かす課題

正常な長さ、空入力、2バイト入力、最大値をテストし、`python -m unittest`で実行しましょう。

参考資料

「4. 関数・モジュール・例外」の章一覧へ