本文へスキップ
totonoe.tech

プログラミング言語を整える

初級

unittest を整える

= 標準ライブラリだけでテストを書いて実行する練習場

4つの課題(クリックで2つのタブに読み込み)

PYTHON CODE Pyodide 0.28(標準ライブラリ unittest)で実行・送信ゼロ

サンプルを選ぶか自分でコードを書いて「▶ unittest 実行」を押すと、ここに結果が出ます。

4つの課題で unittest の骨格をつかむ。

  1. 1

    assertEqual の基本

    self.assertEqual(実際の値, 期待する値) が一致すればテストは通る(緑)。「③ test_add_wrong」はわざと期待値を間違えているので、実際の値との差分が表示されます。

  2. 2

    setUp と複数テスト

    setUp(self) は各テストメソッドの直前に毎回呼ばれます。ここで用意した材料(self.counter など)は、前のテストの影響を受けません。

  3. 3

    例外のテスト(assertRaises)

    with self.assertRaises(例外の型): のブロック内で例外が起きればテストは成功、起きなければ失敗になります。

  4. 4

    サブテストとスキップ(subTest・skip)

    with self.subTest(...) で複数パターンを1つのテストにまとめられます(途中で1つ落ちても残りは実行される)。@unittest.skip("理由") は、そのテストを一時的に外します。

unittest と pytest の違い

どちらも Python のテストの仕組みですが、立ち位置が違います。

観点 unittest pytest
由来 Python 標準ライブラリ(インストール不要) サードパーティ製(pip install pytest が必要)
テストの書き方 unittest.TestCase を継承したクラスのメソッド クラス不要。test_ で始まる関数だけでよい
検査の書き方 専用メソッド(assertEqualassertRaises など) 素の assert 文がそのまま使える
同条件で繰り返す subTest(1メソッドの中でループ) @pytest.mark.parametrize(テストごとに分かれて表示)

pytest 版の同じような練習は /pytest/ の Playground で試せます。書き方の違いを見比べてみてください。

テストの命名規則

unittest がテストを自動で見つけられるのは、決まった名前の付け方に従っているからです。

  • テストクラスunittest.TestCase を継承したクラス。クラス名自体に決まりはありませんが、慣習として Test で始めることが多いです。
  • テストメソッド — 名前が test で始まるメソッドだけが、テストとして自動的に実行されます。test_ を付け忘れると、そのメソッドは静かに無視されます(エラーにもならないので気づきにくい点です)。
  • setUp / tearDown — 決まった名前の特殊メソッドで、それぞれ各テストの前・後に自動で呼ばれます。呼び出す側のコードを書く必要はありません。
  • テストファイル — このページでは test_calc.py という名前で固定していますが、実際のプロジェクトでも test_*.py という命名が、テスト自動収集ツールとの相性がよい慣習です。

このページについて

実行のたびに unittest.TextTestRunner(verbosity=2) の出力を解析し、テストごとの合否一覧と、落ちたテストの抜粋(アサーションの差分・例外の最終行)を分けて表示します。

💡 初回は Pyodide(Python WASM)の読み込みに 5〜15 秒かかります。2 回目以降はキャッシュから瞬時にロード。 書いたコードと実行結果は、どこにも送信されません(すべてブラウザ内で実行)。

🌐 「▶ unittest 実行」を押した最初の1回だけ、Python の実行環境(Pyodide 0.28.0)を配信元の cdn.jsdelivr.net から取得します。 これはプログラムを受け取るだけの通信で、あなたが書いたコードや実行結果が送られることはありません。 ただし通信である以上、配信元にはお使いの回線の IP アドレスが見えます。 「入力は端末から出さない」という当サイトの原則に関わる点なので、隠さずに書いておきます。

このツールについて

unittest は Python に標準で入っているテストの仕組みです。インストールなしで、実装コードとテストコードを書いて実行し、どのテストが通って(緑)どれが落ちたか(赤)をその場で確かめられます。

標準ライブラリ unittest だけでテストを書いて実行できる練習場。落ちるテストを直して通す往復を体験。subTest・skip まで。pytest との違いも解説。

主な機能

  • calc.py と test_calc.py の2タブ
  • 4課題(assertEqual/setUp/assertRaises/subTest とスキップ)
  • テストごとの合否一覧と失敗の抜粋
  • unittest と pytest の違いの解説表・/pytest/ と相互リンク
  • 標準ライブラリのみ・送信ゼロ

よくある質問

Q. unittest と pytest はどちらを覚えればいいですか?

A. どちらも Python の標準的な選択肢です。unittest は標準ライブラリでインストール不要、pytest は素の assert 文が使えるぶん書き方が簡潔です。同じ題材で比べられる /pytest/ のページも用意しています。

Q. テストメソッドの名前に決まりはありますか?

A. あります。名前が test で始まるメソッドだけが自動的に実行されます。付け忘れるとエラーにならず静かに無視されるので注意が必要です。

Q. subTest を使うと何が変わりますか?

A. 1つのテストメソッドの中で複数のパターンを検査でき、途中の1パターンが失敗しても残りはそのまま実行されます。subTest を使わないループでは最初の失敗で止まります。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

KOINOBORI ECOSYSTEM

私たちが運営するサイト