プログラミング言語を整える
初級unittest を整える。
= 標準ライブラリだけでテストを書いて実行する練習場
4つの課題(クリックで2つのタブに読み込み)
サンプルを選ぶか自分でコードを書いて「▶ unittest 実行」を押すと、ここに結果が出ます。
4つの課題で unittest の骨格をつかむ。
- 1
assertEqual の基本
self.assertEqual(実際の値, 期待する値)が一致すればテストは通る(緑)。「③ test_add_wrong」はわざと期待値を間違えているので、実際の値との差分が表示されます。 - 2
setUp と複数テスト
setUp(self)は各テストメソッドの直前に毎回呼ばれます。ここで用意した材料(self.counterなど)は、前のテストの影響を受けません。 - 3
例外のテスト(assertRaises)
with self.assertRaises(例外の型):のブロック内で例外が起きればテストは成功、起きなければ失敗になります。 - 4
サブテストとスキップ(subTest・skip)
with self.subTest(...)で複数パターンを1つのテストにまとめられます(途中で1つ落ちても残りは実行される)。@unittest.skip("理由")は、そのテストを一時的に外します。
unittest と pytest の違い
どちらも Python のテストの仕組みですが、立ち位置が違います。
| 観点 | unittest | pytest |
|---|---|---|
| 由来 | Python 標準ライブラリ(インストール不要) | サードパーティ製(pip install pytest が必要) |
| テストの書き方 | unittest.TestCase を継承したクラスのメソッド | クラス不要。test_ で始まる関数だけでよい |
| 検査の書き方 | 専用メソッド(assertEqual・assertRaises など) | 素の 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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。