AI資格ドリル
資格を選ぶ↓

用語比較

doctestとunittestの違い|テストの書き場所と使い分け(Python3基礎)

Pythonの標準ライブラリには、テストのためのモジュールが2つあります。doctestとunittestです。どちらも関数が期待どおりに動くかを確かめますが、テストを書く場所が違います。

doctestは、docstringに貼り付けた典型的な呼び出し例とその結果を、そのまま検証します。unittestは、別のファイルにテストコードを書き、より網羅的なテストセットを管理できます。doctestは説明文の中、unittestは別ファイルと覚えると区別できます。

Python3エンジニア認定基礎試験は、公式チュートリアルの内容を章ごとの出題率で出題する形で、第10章の標準ライブラリめぐりも範囲です。この記事では、チュートリアル10.11の例で、2つの書き方を見比べます。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。

結論

doctest

docstringに埋め込まれたテストを探し、実行結果を検証する。典型的な呼び出し例とその結果を、docstringに貼り付けるだけでテストになる。doctest.testmod() で走らせる。

unittest

doctestほど気楽には使えないが、より網羅的なテストセットを別のファイルで管理できる。unittest.TestCase を継承したクラスにテストメソッドを書く。

共通点

どちらも標準ライブラリで、関数の動作を自動で確かめる。チュートリアルは、開発と同時にテストを書き、頻繁に走らせる進め方を紹介している。

違いを表で確認

比較軸doctestunittest
テストを書く場所関数のdocstringの中(呼び出し例とその結果)別のファイル(unittest.TestCase を継承したクラスのテストメソッド)
検証の書き方docstringに貼った結果と、実際の実行結果を照らすassertEqual() や assertRaises() で検証する
実行のしかたdoctest.testmod() で、docstringに埋め込まれたテストを自動的に評価するunittest.main() で、コマンドラインから全テストを実行する

Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)

試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

関数の使用例を示しながら、動作も確かめたい人

doctestは、利用者に使用例を示すと同時に、コードがドキュメントに書かれたとおりに動き続けていることを確認できます。

02

例外のテストなど、多くの場合分けを別に管理したい人

unittestは、別のファイルで網羅的なテストセットを管理できます。チュートリアルの例では、assertRaises() で ZeroDivisionError や TypeError が出ることも確かめています。

具体例で使い分ける

例 1

チュートリアル10.11のdoctest

average() 関数のdocstringに、呼び出し例とその結果を貼り付け、doctest.testmod() を呼びます。

  • doctest.testmod() が、docstringに埋め込まれたテストを自動的に評価します。
  • docstringの結果と実行結果が合っていれば、コードがドキュメントどおりに動いていると確認できます。

結論: doctestは、説明文に書いた例をそのままテストにします。

例 2

チュートリアル10.11のunittest

TestStatisticalFunctions クラスを unittest.TestCase の子として定義し、test_average メソッドで average([20, 30, 70]) が 40.0 になることを assertEqual() で確かめます。

  • with self.assertRaises(ZeroDivisionError) で、average([]) が ZeroDivisionError を出すことも確かめます。
  • unittest.main() で、コマンドラインから全テストを実行します。

結論: unittestは、別ファイルでより網羅的にテストを管理する書き方です。

問題文から答えを選ぶ手順

  1. 1

    テストの置き場所を見る

    docstringの中ならdoctest、TestCaseを継承したクラスならunittestです。

  2. 2

    検証の書き方を見る

    呼び出し例と結果の貼り付けならdoctest、assertEqual() などの呼び出しならunittestです。

  3. 3

    実行の呼び出しを見る

    doctest.testmod() ならdoctest、unittest.main() ならunittestです。

試験での見分け方

  • 1docstringに埋め込んだ呼び出し例と結果を検証するのは、doctest。
  • 2別ファイルでTestCaseを継承したクラスに書くのは、unittest。
  • 3unittestは、doctestほど気楽に使えないが、より網羅的なテストセットを管理できる。
  • 4doctest.testmod() と unittest.main() は、呼び出しの名前でどちらのモジュールか区別できる。

誤答しやすい選択肢

doctestも別ファイルにテストを書くと考える

修正: doctestのテストはdocstringに埋め込みます。別ファイルに書くのはunittestです。

unittestがdocstringの呼び出し例を検証すると考える

修正: unittestはTestCaseを継承したクラスのテストメソッドを実行します。docstringの検証はdoctestです。

確認問題

Q1docstringに埋め込まれたテストを自動的に評価するモジュールは?

答え: doctest

チュートリアル10.11が、doctest.testmod() で評価できると説明しています。

Q2unittest でテストメソッドを書くとき、継承するクラスは?

答え: unittest.TestCase

チュートリアルの例は、TestStatisticalFunctions を unittest.TestCase の子として定義しています。

Q3unittest で、ある呼び出しが ZeroDivisionError を出すことを確かめる書き方は?

答え: with self.assertRaises(ZeroDivisionError): ...

チュートリアルの例で、average([]) が例外を出すことの確認に使われています。

到達チェック

  • doctestのテストを書く場所を言える
  • unittestのテストを書く場所を言える
  • doctest.testmod() と unittest.main() の違いを説明できる

同じ資格で次に知りたいこと

よくある質問

Qdoctestとは?

A

docstringに埋め込まれたテストを探し、実行結果を検証する標準ライブラリです。

Qunittestとは?

A

別のファイルに、より網羅的なテストセットを管理できる標準ライブラリです。unittest.TestCase を継承したクラスにテストメソッドを書きます。

Qdoctestとunittestの違いは?

A

テストを書く場所です。doctestはdocstringの中、unittestは別ファイルのTestCaseに書きます。

QPython3基礎試験の範囲?

A

公式の出題範囲は公式チュートリアルの章単位で、第10章の標準ライブラリめぐりと、10.11の品質管理を含みます。出題の形式は受験前に公式の案内で確認してください。

次に見る比較

執筆: ミナト編集部(運営者情報を見る)