test — Python用の回帰テストパッケージ—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/test
移動先:案内検索

test —Python用の回帰テストパッケージ

ノート

test パッケージは、Pythonによる内部使用のみを目的としています。 Pythonのコア開発者のために文書化されています。 ここに記載されているコードは、Pythonのリリース間で予告なしに変更または削除される可能性があるため、Pythonの標準ライブラリの外部でこのパッケージを使用することはお勧めしません。



test パッケージには、Pythonのすべての回帰テストと、モジュール test.support およびtest.regrtestが含まれています。 test.support はテストを強化するために使用され、test.regrtestはテストスイートを駆動します。

名前がtest_で始まる test パッケージの各モジュールは、特定のモジュールまたは機能のテストスイートです。 すべての新しいテストは、 unittest または doctest モジュールを使用して作成する必要があります。 一部の古いテストは、sys.stdoutに出力された出力を比較する「従来の」テストスタイルを使用して記述されています。 このスタイルのテストは非推奨と見なされます。

も参照してください

モジュールユニットテスト
PyUnit回帰テストの作成。
モジュール doctest
ドキュメント文字列に埋め込まれたテスト。


test パッケージのユニットテストの作成

unittest モジュールを使用するテストはいくつかのガイドラインに従うことが望ましいです。 1つは、test_で開始してテストモジュールに名前を付け、テストするモジュールの名前で終了することです。 テストモジュールのテストメソッドは、test_で始まり、メソッドがテストしている内容の説明で終わる必要があります。 これは、メソッドがテストドライバーによってテストメソッドとして認識されるために必要です。 また、メソッドのドキュメント文字列を含めることはできません。 コメント(# Tests function returns only True or Falseなど)を使用して、テストメソッドのドキュメントを提供する必要があります。 これが行われるのは、ドキュメント文字列が存在する場合は印刷され、実行されているテストが指定されていないためです。

基本的なボイラープレートがよく使用されます。

import unittest
from test import support

class MyTestCase1(unittest.TestCase):

    # Only use setUp() and tearDown() if necessary

    def setUp(self):
        ... code to execute in preparation for tests ...

    def tearDown(self):
        ... code to execute to clean up after tests ...

    def test_feature_one(self):
        # Test feature one.
        ... testing code ...

    def test_feature_two(self):
        # Test feature two.
        ... testing code ...

    ... more test methods ...

class MyTestCase2(unittest.TestCase):
    ... same structure as MyTestCase1 ...

... more test classes ...

if __name__ == '__main__':
    unittest.main()

このコードパターンにより、テストスイートをtest.regrtestで実行したり、 unittest CLIをサポートするスクリプトとして単独で実行したり、python -m unittest CLIを介して実行したりできます。

回帰テストの目標は、コードを解読しようとすることです。 これにより、従うべきいくつかのガイドラインが導き出されます。

  • テストスイートは、すべてのクラス、関数、および定数を実行する必要があります。 これには、外部に提示される外部APIだけでなく、「プライベート」コードも含まれます。

  • ホワイトボックステスト(テストの作成時にテストされるコードを調べる)が推奨されます。 ブラックボックステスト(公開されたユーザーインターフェイスのみをテストする)は、すべての境界およびエッジケースがテストされていることを確認するのに十分なほど完全ではありません。

  • 無効な値を含め、すべての可能な値がテストされていることを確認してください。 これにより、すべての有効な値が受け入れられるだけでなく、不適切な値が正しく処理されるようになります。

  • できるだけ多くのコードパスを使い果たします。 分岐が発生する場所をテストし、入力を調整して、コード内でできるだけ多くの異なるパスが使用されることを確認します。

  • テストされたコードで発見されたバグの明示的なテストを追加します。 これにより、将来コードが変更された場合にエラーが再発しないようになります。

  • テスト後は必ずクリーンアップしてください(すべての一時ファイルを閉じて削除するなど)。

  • テストがオペレーティングシステムの特定の条件に依存している場合は、テストを試行する前に、条件がすでに存在することを確認してください。

  • できるだけ少ないモジュールをインポートし、できるだけ早く実行します。 これにより、テストの外部依存関係が最小限に抑えられ、モジュールのインポートの副作用による異常な動作の可能性も最小限に抑えられます。

  • コードの再利用を最大化するようにしてください。 場合によっては、使用される入力のタイプと同じくらい小さいものによってテストが異なることがあります。 基本的なテストクラスを入力を指定するクラスでサブクラス化することにより、コードの重複を最小限に抑えます。

    class TestFuncAcceptsSequencesMixin:
    
        func = mySuperWhammyFunction
    
        def test_func(self):
            self.func(self.arg)
    
    class AcceptLists(TestFuncAcceptsSequencesMixin, unittest.TestCase):
        arg = [1, 2, 3]
    
    class AcceptStrings(TestFuncAcceptsSequencesMixin, unittest.TestCase):
        arg = 'abc'
    
    class AcceptTuples(TestFuncAcceptsSequencesMixin, unittest.TestCase):
        arg = (1, 2, 3)

    このパターンを使用するときは、 unittest.TestCase から継承するすべてのクラスがテストとして実行されることに注意してください。 上記の例のMixinクラスにはデータがないため、単独で実行することはできません。したがって、 unittest.TestCase から継承しません。

も参照してください

テスト駆動開発
コードの前にテストを書くことに関するケントベックの本。


コマンドラインインターフェイスを使用したテストの実行

test パッケージは、 -m オプション python -m test のおかげで、Pythonの回帰テストスイートを駆動するスクリプトとして実行できます。 内部では、test.regrtestを使用しています。 以前のPythonバージョンで使用されていた python -m test.regrtest の呼び出しは引き続き機能します。 スクリプトを単独で実行すると、 test パッケージ内のすべての回帰テストの実行が自動的に開始されます。 これは、名前がtest_で始まるパッケージ内のすべてのモジュールを検索してインポートし、存在する場合は関数test_main()を実行するか、test_mainは存在しません。 実行するテストの名前もスクリプトに渡すことができます。 単一の回帰テスト( python -m test test_spam )を指定すると、出力が最小化され、テストが成功したか失敗したかのみが出力されます。

test を直接実行すると、テストに使用できるリソースを設定できます。 これを行うには、-uコマンドラインオプションを使用します。 -uオプションの値としてallを指定すると、すべての可能なリソースが有効になります: python -m test -uall 。 1つを除くすべてのリソースが必要な場合(より一般的なケース)、不要なリソースのコンマ区切りリストがallの後にリストされる場合があります。 コマンド python -m test -uall、-audio、-largefile は、audioおよびlargefileリソースを除くすべてのリソースで test を実行します。 すべてのリソースとその他のコマンドラインオプションのリストについては、 python -m test -h を実行してください。

回帰テストを実行する他のいくつかの方法は、テストが実行されているプラットフォームによって異なります。 Unixでは、Pythonが構築された最上位ディレクトリで make test を実行できます。 Windowsでは、PCbuildディレクトリから rt.bat を実行すると、すべての回帰テストが実行されます。


test.support —Pythonテストスイートのユーティリティ

test.support モジュールは、Pythonの回帰テストスイートのサポートを提供します。

ノート

test.support はパブリックモジュールではありません。 Python開発者がテストを作成するのに役立つように、ここに文書化されています。 このモジュールのAPIは、リリース間の下位互換性の懸念なしに変更される可能性があります。


このモジュールは、次の例外を定義します。

exception test.support.TestFailed
テストが失敗したときに発生する例外。 これは、 unittest ベースのテストと unittest.TestCase のアサーションメソッドを優先して非推奨になりました。
exception test.support.ResourceDenied
unittest.SkipTest のサブクラス。 リソース(ネットワーク接続など)が利用できない場合に発生します。 require()関数によって発生します。

test.support モジュールは、次の定数を定義します。

test.support.verbose
True詳細出力が有効な場合。 実行中のテストについてより詳細な情報が必要な場合は、チェックする必要があります。 verbosetest.regrtestによって設定されます。
test.support.is_jython
True実行中のインタープリターがJythonの場合。
test.support.is_android
TrueシステムがAndroidの場合。
test.support.unix_shell
Windowsでない場合のシェルのパス。 それ以外の場合はNone
test.support.FS_NONASCII
os.fsencode()でエンコード可能な非ASCII文字。
test.support.TESTFN
一時ファイルの名前として安全に使用できる名前に設定します。 作成された一時ファイルはすべて閉じて、リンクを解除(削除)する必要があります。
test.support.TESTFN_UNICODE
一時ファイルの非ASCII名に設定します。
test.support.TESTFN_ENCODING
sys.getfilesystemencoding()に設定します。
test.support.TESTFN_UNENCODABLE
strictモードのファイルシステムエンコーディングでエンコードできないファイル名(strタイプ)に設定します。 このようなファイル名を生成できない場合は、Noneの可能性があります。
test.support.TESTFN_UNDECODABLE
strictモードのファイルシステムエンコーディングでデコードできないファイル名(バイトタイプ)に設定します。 このようなファイル名を生成できない場合は、Noneの可能性があります。
test.support.TESTFN_NONASCII
FS_NONASCII 文字を含むファイル名に設定します。
test.support.IPV6_ENABLED
このホストでIPV6が有効になっている場合はTrueに設定し、そうでない場合はFalseに設定します。
test.support.SAVEDCWD
os.getcwd()に設定します。
test.support.PGO
PGOに役立たないときに、テストをスキップできる場合に設定します。
test.support.PIPE_MAX_SIZE
書き込みをブロックするために、基になるOSパイプバッファサイズよりも大きい可能性が高い定数。
test.support.SOCK_MAX_SIZE
書き込みをブロックするために、基になるOSソケットのバッファサイズよりも大きい可能性が高い定数。
test.support.TEST_SUPPORT_DIR
test.support を含む最上位ディレクトリに設定します。
test.support.TEST_HOME_DIR
テストパッケージの最上位ディレクトリに設定します。
test.support.TEST_DATA_DIR
テストパッケージ内のdataディレクトリに設定します。
test.support.MAX_Py_ssize_t
大容量メモリテストの場合は、 sys.maxsize に設定します。
test.support.max_memuse
ビッグメモリテストのメモリ制限として set_memlimit()によって設定されます。 MAX_Py_ssize_t によって制限されます。
test.support.real_max_memuse
ビッグメモリテストのメモリ制限として set_memlimit()によって設定されます。 MAX_Py_ssize_t による制限はありません。
test.support.MISSING_C_DOCSTRINGS
WindowsではなくCPythonで実行していて、構成がWITH_DOC_STRINGSで設定されていない場合は、Trueを返します。
test.support.HAVE_DOCSTRINGS
docstringの存在を確認します。
test.support.TEST_HTTP_URL
ネットワークテスト専用のHTTPサーバーのURLを定義します。
test.support.ALWAYS_EQ
何にでも等しいオブジェクト。 混合タイプの比較をテストするために使用されます。
test.support.LARGEST
何よりも大きいオブジェクト(それ自体を除く)。 混合タイプの比較をテストするために使用されます。
test.support.SMALLEST
何よりも小さいオブジェクト(それ自体を除く)。 混合タイプの比較をテストするために使用されます。

test.support モジュールは、次の関数を定義します。

test.support.forget(module_name)
module_name という名前のモジュールをsys.modulesから削除し、モジュールのバイトコンパイルされたファイルをすべて削除します。
test.support.unload(name)
sys.modulesから name を削除します。
test.support.unlink(filename)
ファイル名os.unlink()を呼び出します。 Windowsプラットフォームでは、これはファイルの存在をチェックする待機ループでラップされます。
test.support.rmdir(filename)
ファイル名os.rmdir()を呼び出します。 Windowsプラットフォームでは、これはファイルの存在をチェックする待機ループでラップされます。
test.support.rmtree(path)
パスshutil.rmtree()を呼び出すか、 os.lstat()および os.rmdir()を呼び出してパスを削除し、その内容。 Windowsプラットフォームでは、これはファイルの存在をチェックする待機ループでラップされます。
test.support.make_legacy_pyc(source)
PEP 3147 / PEP 488 pycファイルをレガシーpycの場所に移動し、ファイルシステムパスをレガシーpycファイルに戻します。 source 値は、ソースファイルへのファイルシステムパスです。 存在する必要はありませんが、PEP 3147 / 488pycファイルが存在する必要があります。
test.support.is_resource_enabled(resource)
リソースが有効で使用可能な場合は、Trueを返します。 利用可能なリソースのリストは、test.regrtestがテストを実行しているときにのみ設定されます。
test.support.python_is_optimized()
Pythonが-O0または-Ogでビルドされていない場合は、Trueを返します。
test.support.with_pymalloc()
_testcapi.WITH_PYMALLOCを返します。
test.support.requires(resource, msg=None)
resource が利用できない場合は、 ResourceDenied を上げます。 msg は、 ResourceDenied が発生した場合の引数です。 __name__'__main__'である関数によって呼び出された場合、常にTrueを返します。 test.regrtestでテストを実行する場合に使用します。
test.support.system_must_validate_cert(f)
TLS認証検証の失敗で unittest.SkipTest を発生させます。
test.support.sortdict(dict)
キーがソートされた dict のreprを返します。
test.support.findfile(filename, subdir=None)

filename という名前のファイルへのパスを返します。 一致するものが見つからない場合は、ファイル名が返されます。 これはファイルへのパスである可能性があるため、失敗と同じではありません。

subdir を設定すると、パスディレクトリを直接調べるのではなく、ファイルを見つけるために使用する相対パスが示されます。

test.support.create_empty_file(filename)
ファイル名で空のファイルを作成します。 すでに存在する場合は、切り捨てます。
test.support.fd_count()
開いているファイル記述子の数を数えます。
test.support.match_test(test)
testset_match_tests()で設定されたパターンに一致させます。
test.support.set_match_tests(patterns)
正規表現パターンを使用して一致テストを定義します。
test.support.run_unittest(*classes)

関数に渡された unittest.TestCase サブクラスを実行します。 この関数は、プレフィックスtest_で始まるメソッドのクラスをスキャンし、テストを個別に実行します。

文字列をパラメータとして渡すことも合法です。 これらはsys.modulesのキーである必要があります。 関連する各モジュールは、unittest.TestLoader.loadTestsFromModule()によってスキャンされます。 これは通常、次のtest_main()関数で見られます。

def test_main():
    support.run_unittest(__name__)

これにより、指定されたモジュールで定義されたすべてのテストが実行されます。

test.support.run_doctest(module, verbosity=None, optionflags=0)

指定されたモジュールdoctest.testmod()を実行します。 (failure_count, test_count)を返します。

verbosityNoneの場合、 doctest.testmod()は、vervosityを verbose に設定して実行されます。 それ以外の場合は、詳細度をNoneに設定して実行されます。 optionflagsoptionflagsとして doctest.testmod()に渡されます。

test.support.setswitchinterval(interval)
sys.setswitchinterval()を指定された interval に設定します。 システムがハングしないようにするためのAndroidシステムの最小間隔を定義します。
test.support.check_impl_detail(**guards)

このチェックを使用して、CPythonの実装固有のテストを保護するか、引数によって保護された実装でのみテストを実行します。

check_impl_detail()               # Only on CPython (default).
check_impl_detail(jython=True)    # Only on Jython.
check_impl_detail(cpython=False)  # Everywhere except CPython.
test.support.check_warnings(*filters, quiet=True)

warnings.catch_warnings()の便利なラッパーで、警告が正しく発生したことを簡単にテストできます。 これは、 warnings.simplefilter()alwaysに設定し、記録された結果を自動的に検証するオプションを指定してwarnings.catch_warnings(record=True)を呼び出すのとほぼ同じです。

check_warningsは、位置引数として("message regexp", WarningCategory)の形式の2タプルを受け入れます。 1つ以上の filters が提供されている場合、またはオプションのキーワード引数 quickFalseの場合、警告が期待どおりであることを確認します。指定された各フィルターは必須です。同封のコードによって発生した警告の少なくとも1つに一致するか、テストが失敗し、指定されたフィルターのいずれにも一致しない警告が発生した場合、テストは失敗します。 これらの最初のチェックを無効にするには、 quickTrueに設定します。

引数が指定されていない場合、デフォルトで次のようになります。

check_warnings(("", Warning), quiet=True)

この場合、すべての警告がキャッチされ、エラーは発生しません。

コンテキストマネージャーに入ると、WarningRecorderインスタンスが返されます。 catch_warnings()の基になる警告リストは、レコーダーオブジェクトの warnings 属性を介して利用できます。 便宜上、最新の警告を表すオブジェクトの属性には、レコーダーオブジェクトから直接アクセスすることもできます(以下の例を参照)。 警告が発生していない場合、警告を表すオブジェクトで予期される属性はすべてNoneを返します。

レコーダオブジェクトには、警告リストをクリアするreset()メソッドもあります。

コンテキストマネージャーは、次のように使用するように設計されています。

with check_warnings(("assertion is always true", SyntaxWarning),
                    ("", UserWarning)):
    exec('assert(False, "Hey!")')
    warnings.warn(UserWarning("Hide me!"))

この場合、警告が発生しなかった場合、またはその他の警告が発生した場合、 check_warnings()はエラーを発生させます。

テストで警告が発生したかどうかを確認するだけでなく、警告をより深く調べる必要がある場合は、次のようなコードを使用できます。

with check_warnings(quiet=True) as w:
    warnings.warn("foo")
    assert str(w.args[0]) == "foo"
    warnings.warn("bar")
    assert str(w.args[0]) == "bar"
    assert str(w.warnings[0].args[0]) == "foo"
    assert str(w.warnings[1].args[0]) == "bar"
    w.reset()
    assert len(w.warnings) == 0

ここですべての警告がキャッチされ、テストコードはキャプチャされた警告を直接テストします。

バージョン3.2で変更:新しいオプションの引数フィルターおよび静かな

test.support.check_no_resource_warning(testcase)
ResourceWarning が発生していないことを確認するコンテキストマネージャー。 コンテキストマネージャが終了する前に、 ResourceWarning を発行する可能性のあるオブジェクトを削除する必要があります。
test.support.set_memlimit(limit)
大容量メモリテストの場合は、 max_memuse および real_max_memuse の値を設定します。
test.support.record_original_stdout(stdout)
stdout の値を保存します。 これは、regrtestが開始されたときにstdoutを保持することを目的としています。
test.support.get_original_stdout()
record_original_stdout()またはsys.stdoutで設定されていない場合は、元のstdoutを返します。
test.support.strip_python_strerr(stderr)
Pythonプロセスの stderr を、インタープリターによって発行される潜在的なデバッグ出力から取り除きます。 これは通常、 subprocess.Popen.communicate()の結果に対して実行されます。
test.support.args_from_interpreter_flags()
sys.flagsおよびsys.warnoptionsの現在の設定を再現するコマンドライン引数のリストを返します。
test.support.optim_args_from_interpreter_flags()
sys.flagsの現在の最適化設定を再現するコマンドライン引数のリストを返します。
test.support.captured_stdin()
test.support.captured_stdout()
test.support.captured_stderr()

名前付きストリームを io.StringIO オブジェクトに一時的に置き換えるコンテキストマネージャー。

出力ストリームでの使用例:

with captured_stdout() as stdout, captured_stderr() as stderr:
    print("hello")
    print("error", file=sys.stderr)
assert stdout.getvalue() == "hello\n"
assert stderr.getvalue() == "error\n"

入力ストリームでの使用例:

with captured_stdin() as stdin:
    stdin.write('hello\n')
    stdin.seek(0)
    # call test code that consumes from sys.stdin
    captured = input()
self.assertEqual(captured, "hello")
test.support.temp_dir(path=None, quiet=False)

path に一時ディレクトリを作成し、そのディレクトリを生成するコンテキストマネージャ。

pathNoneの場合、一時ディレクトリは tempfile.mkdtemp()を使用して作成されます。 quickFalseの場合、コンテキストマネージャーはエラー時に例外を発生させます。 それ以外の場合、パスが指定されていて作成できない場合は、警告のみが発行されます。

test.support.change_cwd(path, quiet=False)

現在の作業ディレクトリを一時的に path に変更し、ディレクトリを生成するコンテキストマネージャ。

quickFalseの場合、コンテキストマネージャーはエラー時に例外を発生させます。 それ以外の場合は、警告のみを発行し、現在の作業ディレクトリを同じに保ちます。

test.support.temp_cwd(name='tempcwd', quiet=False)

新しいディレクトリを一時的に作成し、現在の作業ディレクトリ(CWD)を変更するコンテキストマネージャ。

コンテキストマネージャは、現在の作業ディレクトリを一時的に変更する前に、 name という名前で現在のディレクトリに一時ディレクトリを作成します。 nameNoneの場合、一時ディレクトリは tempfile.mkdtemp()を使用して作成されます。

quietFalseであり、CWDを作成または変更できない場合、エラーが発生します。 それ以外の場合は、警告のみが発生し、元のCWDが使用されます。

test.support.temp_umask(umask)
プロセスのumaskを一時的に設定するコンテキストマネージャー。
test.support.transient_internet(resource_name, *, timeout=30.0, errnos=())
インターネット接続に関するさまざまな問題が例外として現れたときに ResourceDenied を発生させるコンテキストマネージャー。
test.support.disable_faulthandler()
sys.stderrsys.__stderr__に置き換えるコンテキストマネージャー。
test.support.gc_collect()
できるだけ多くのオブジェクトを強制的に収集します。 これが必要なのは、ガベージコレクターによってタイムリーな割り当て解除が保証されていないためです。 これは、__del__メソッドが予想よりも遅く呼び出され、weakrefが予想よりも長く存続する可能性があることを意味します。
test.support.disable_gc()
エントリ時にガベージコレクタを無効にし、終了時に再度有効にするコンテキストマネージャ。
test.support.swap_attr(obj, attr, new_val)

属性を新しいオブジェクトと交換するためのコンテキストマネージャー。

使用法:

with swap_attr(obj, "attr", 5):
    ...

これにより、withブロックの期間中obj.attrが5に設定され、ブロックの最後で古い値が復元されます。 attrobjに存在しない場合は、ブロックの最後で作成および削除されます。

古い値(または存在しない場合はNone)は、「as」句がある場合はそのターゲットに割り当てられます。

test.support.swap_item(obj, attr, new_val)

アイテムを新しいオブジェクトと交換するためのコンテキストマネージャー。

使用法:

with swap_item(obj, "item", 5):
    ...

これにより、withブロックの期間中obj["item"]が5に設定され、ブロックの最後で古い値が復元されます。 itemobjに存在しない場合は、ブロックの最後で作成および削除されます。

古い値(または存在しない場合はNone)は、「as」句がある場合はそのターゲットに割り当てられます。

test.support.wait_threads_exit(timeout=60.0)
withステートメントで作成されたすべてのスレッドが終了するまで待機するコンテキストマネージャー。
test.support.start_threads(threads, unlock=None)
スレッドを開始するコンテキストマネージャー。 終了時にスレッドに参加しようとします。
test.support.calcobjsize(fmt)
nP{fmt}0nに対して struct.calcsize()を返すか、gettotalrefcountが存在する場合は2PnP{fmt}0Pを返します。
test.support.calcvobjsize(fmt)
nPn{fmt}0nに対して struct.calcsize()を返すか、gettotalrefcountが存在する場合は2PnPn{fmt}0Pを返します。
test.support.checksizeof(test, o, size)
テストケーステストの場合、 osys.getsizeofにGCヘッダーサイズを加えたものがサイズに等しいことを表明します。
test.support.can_symlink()
OSがシンボリックリンクをサポートしている場合はTrueを返し、そうでない場合はFalseを返します。
test.support.can_xattr()
OSがxattrをサポートしている場合はTrueを返し、そうでない場合はFalseを返します。
@test.support.skip_unless_symlink
シンボリックリンクのサポートを必要とするテストを実行するためのデコレータ。
@test.support.skip_unless_xattr
xattrのサポートを必要とするテストを実行するためのデコレータ。
@test.support.skip_unless_bind_unix_socket
Unixソケットの機能的なbind()を必要とするテストを実行するためのデコレータ。
@test.support.anticipate_failure(condition)
unittest.expectedFailure()でテストを条件付きでマークするデコレータ。 このデコレータを使用する場合は、関連するトラッカーの問題を特定するコメントを関連付ける必要があります。
@test.support.run_with_locale(catstr, *locales)
別のロケールで関数を実行するためのデコレータ。終了後に関数を正しくリセットします。 catstr は、文字列としてのロケールカテゴリです(たとえば、"LC_ALL")。 渡された locales が順番に試行され、最初の有効なロケールが使用されます。
@test.support.run_with_tz(tz)
特定のタイムゾーンで関数を実行し、終了後に関数を正しくリセットするためのデコレータ。
@test.support.requires_freebsd_version(*min_version)
FreeBSDでテストを実行するときの最小バージョンのデコレータ。 FreeBSDのバージョンが最小値よりも小さい場合は、 unittest.SkipTest を上げてください。
@test.support.requires_linux_version(*min_version)
Linuxでテストを実行するときの最小バージョンのデコレータ。 Linuxのバージョンが最小値よりも小さい場合は、 unittest.SkipTest を上げます。
@test.support.requires_mac_version(*min_version)
Mac OSXでテストを実行するときの最小バージョンのデコレータ。 MAC OS Xのバージョンが最小値よりも小さい場合は、 unittest.SkipTest を上げます。
@test.support.requires_IEEE_754
IEEE754以外のプラットフォームでテストをスキップするためのデコレータ。
@test.support.requires_zlib
zlib が存在しない場合にテストをスキップするためのデコレータ。
@test.support.requires_gzip
gzip が存在しない場合にテストをスキップするためのデコレータ。
@test.support.requires_bz2
bz2 が存在しない場合にテストをスキップするためのデコレータ。
@test.support.requires_lzma
lzma が存在しない場合にテストをスキップするためのデコレータ。
@test.support.requires_resource(resource)
resource が利用できない場合にテストをスキップするためのデコレータ。
@test.support.requires_docstrings
HAVE_DOCSTRINGS の場合にのみテストを実行するためのデコレータ。
@test.support.cpython_only(test)
CPythonにのみ適用可能なテスト用のデコレータ。
@test.support.impl_detail(msg=None, **guards)
ガードcheck_impl_detail()を呼び出すためのデコレータ。 それがFalseを返す場合、テストをスキップする理由として msg を使用します。
@test.support.no_tracing(func)
テスト期間中、トレースを一時的にオフにするデコレータ。
@test.support.refcount_test(test)
参照カウントを含むテスト用のデコレータ。 デコレータは、CPythonで実行されていない場合、テストを実行しません。 トレース機能によって引き起こされる予期しない参照カウントを防ぐために、テストの間、トレース機能は設定されません。
@test.support.reap_threads(func)
テストが失敗した場合でもスレッドがクリーンアップされるようにするデコレータ。
@test.support.bigmemtest(size, memuse, dry_run=True)

bigmemテスト用のデコレータ。

size は、テストに要求されたサイズです(任意のテスト解釈単位)。 memuse は、テストの単位あたりのバイト数、またはその適切な見積もりです。 たとえば、それぞれ4 GiBの2バイトのバッファーを必要とするテストは、@bigmemtest(size=_4G, memuse=2)で装飾できます。

size 引数は通常、追加の引数として装飾されたテストメソッドに渡されます。 dry_runTrueの場合、テストメソッドに渡される値が要求された値よりも小さい可能性があります。 dry_runFalseの場合、-Mが指定されていない場合、テストはダミー実行をサポートしないことを意味します。

@test.support.bigaddrspacetest(f)
アドレス空間を埋めるテスト用のデコレータ。 f はラップする関数です。
test.support.make_bad_fd()
一時ファイルを開いたり閉じたりして、その記述子を返すことにより、無効なファイル記述子を作成します。
test.support.check_syntax_error(testcase, statement, errtext=, *, lineno=None, offset=None)
ステートメントのコンパイルを試みて、ステートメントの構文エラーをテストします。 testcase は、テストの unittest インスタンスです。 errtext は、発生した SyntaxError の文字列表現と一致する必要がある正規表現です。 linenoNoneでない場合、例外の行と比較します。 offsetNoneでない場合、例外のオフセットと比較します。
test.support.check_syntax_warning(testcase, statement, errtext=, *, lineno=1, offset=None)

ステートメントのコンパイルを試みて、ステートメントの構文警告をテストします。 また、 SyntaxWarning が1回だけ発行され、エラーになると SyntaxError に変換されることもテストします。 testcase は、テストの unittest インスタンスです。 errtext は、発行された SyntaxWarning および発生した SyntaxError の文字列表現と一致する必要がある正規表現です。 linenoNoneでない場合、警告および例外の行と比較します。 offsetNoneでない場合、例外のオフセットと比較します。

バージョン3.8の新機能。

test.support.open_urlresource(url, *args, **kw)
url を開きます。 openが失敗した場合、 TestFailed を発生させます。
test.support.import_module(name, deprecated=False, *, required_on())

この関数は、指定されたモジュールをインポートして返します。 通常のインポートとは異なり、この関数は、モジュールをインポートできない場合に unittest.SkipTest を発生させます。

deprecatedTrueの場合、モジュールとパッケージの非推奨メッセージはこのインポート中に抑制されます。 モジュールがプラットフォームで必須であるが、他のプラットフォームではオプションである場合は、 required_on を、 sys.platform と比較されるプラットフォームプレフィックスの反復可能に設定します。

バージョン3.1の新機能。

test.support.import_fresh_module(name, fresh=(), blocked=(), deprecated=False)

この関数は、インポートを実行する前にsys.modulesから名前付きモジュールを削除することにより、名前付きPythonモジュールの新しいコピーをインポートして返します。 reload()とは異なり、元のモジュールはこの操作の影響を受けないことに注意してください。

fresh は、インポートを実行する前にsys.modulesキャッシュからも削除される追加のモジュール名の反復可能です。

blocked は、インポート中にモジュールキャッシュ内でNoneに置き換えられるモジュール名の反復可能であり、それらをインポートしようとすると ImportError が発生します。

指定されたモジュールと、 fresh および blocked パラメーターで指定されたモジュールは、インポートを開始する前に保存され、新規インポートが完了するとsys.modulesに再挿入されます。

deprecatedTrueの場合、モジュールとパッケージの非推奨メッセージはこのインポート中に抑制されます。

指定されたモジュールをインポートできない場合、この関数は ImportError を発生させます。

使用例:

# Get copies of the warnings module for testing without affecting the
# version being used by the rest of the test suite. One copy uses the
# C implementation, the other is forced to use the pure Python fallback
# implementation
py_warnings = import_fresh_module('warnings', blocked=['_warnings'])
c_warnings = import_fresh_module('warnings', fresh=['_warnings'])

バージョン3.1の新機能。

test.support.modules_setup()
sys.modules のコピーを返します。
test.support.modules_cleanup(oldmodules)
内部キャッシュを保持するために、 oldmodulesencodings以外のモジュールを削除します。
test.support.threading_setup()
現在のスレッド数とぶら下がっているスレッドのコピーを返します。
test.support.threading_cleanup(*original_values)
original_values で指定されていないスレッドをクリーンアップします。 テストで実行中のスレッドがバックグラウンドで残った場合に警告を発するように設計されています。
test.support.join_thread(thread, timeout=30.0)
タイムアウト内にスレッドに参加します。 タイムアウト秒後もスレッドがまだ生きている場合は、 AssertionError を発生させます。
test.support.reap_children()
test_mainの最後に、サブプロセスが開始されるたびにこれを使用します。 これにより、余分な子(ゾンビ)がリソースを占有したり、リフリークを探すときに問題が発生したりすることがなくなります。
test.support.get_attribute(obj, name)
属性を取得し、 AttributeError が発生した場合は、 unittest.SkipTest を発生させます。
test.support.bind_port(sock, host=HOST)

ソケットを空きポートにバインドし、ポート番号を返します。 バインドされていないポートを使用していることを確認するために、エフェメラルポートに依存しています。 特にビルドボット環境では、多くのテストが同時に実行される可能性があるため、これは重要です。 このメソッドは、sock.familyAF_INET で、sock.typeSOCK_STREAM であり、ソケットにSO_REUSEADDRまたはSO_REUSEPORTが設定されています。 テストでは、TCP / IPソケットにこれらのソケットオプションを設定しないでください。 これらのオプションを設定する唯一のケースは、複数のUDPソケットを介したマルチキャストのテストです。

さらに、SO_EXCLUSIVEADDRUSEソケットオプションが利用可能な場合(つまり、 Windowsの場合)、ソケットに設定されます。 これにより、テスト期間中、他の人がホスト/ポートにバインドするのを防ぐことができます。

test.support.bind_unix_socket(sock, addr)
PermissionError が発生した場合は、 unittest.SkipTest を発生させて、unixソケットをバインドします。
test.support.catch_threading_exception()

threading.excepthook()を使用して threading.Thread 例外をキャッチするコンテキストマネージャー。

例外がキャッチされたときに設定される属性:

  • exc_type

  • exc_value

  • exc_traceback

  • thread

threading.excepthook()のドキュメントを参照してください。

これらの属性は、コンテキストマネージャーの終了時に削除されます。

使用法:

with support.catch_threading_exception() as cm:
    # code spawning a thread which raises an exception
    ...

    # check the thread exception, use cm attributes:
    # exc_type, exc_value, exc_traceback, thread
    ...

# exc_type, exc_value, exc_traceback, thread attributes of cm no longer
# exists at this point
# (to avoid reference cycles)

バージョン3.8の新機能。

test.support.catch_unraisable_exception()

sys.unraisablehook()を使用して発生しない例外をキャッチするコンテキストマネージャー。

例外値(cm.unraisable.exc_value)を保存すると、参照サイクルが作成されます。 コンテキストマネージャーが終了すると、参照サイクルが明示的に中断されます。

オブジェクト(cm.unraisable.object)を保存すると、ファイナライズ中のオブジェクトに設定されている場合、オブジェクトを復活させることができます。 コンテキストマネージャを終了すると、保存されているオブジェクトがクリアされます。

使用法:

with support.catch_unraisable_exception() as cm:
    # code creating an "unraisable exception"
    ...

    # check the unraisable exception: use cm.unraisable
    ...

# cm.unraisable attribute no longer exists at this point
# (to break a reference cycle)

バージョン3.8の新機能。

test.support.find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM)

バインディングに適しているはずの未使用のポートを返します。 これは、sockパラメーター(デフォルトは AF_INETSOCK_STREAM )と同じファミリーとタイプの一時ソケットを作成し、それを指定されたホストにバインドすることで実現されます。ポートを0に設定したアドレス(デフォルトは0.0.0.0)で、OSから未使用のエフェメラルポートを引き出します。 その後、一時ソケットが閉じられて削除され、エフェメラルポートが返されます。

このメソッドまたは bind_port()は、テスト中にサーバーソケットを特定のポートにバインドする必要があるテストに使用する必要があります。 どちらを使用するかは、呼び出し元のコードがPythonソケットを作成しているかどうか、または未使用のポートをコンストラクターで提供する必要があるか、外部プログラムに渡す必要があるかによって異なります(つまり、 opensslのs_serverモードに対する-accept引数)。 可能な場合は、 find_unused_port()よりも bind_port()を常に優先します。 ハードコードされたポートを使用すると、テストの複数のインスタンスを同時に実行できなくなる可能性があるため、お勧めしません。これは、ビルドボットの問題です。

test.support.load_package_tests(pkg_dir, loader, standard_tests, pattern)

テストパッケージで使用するための unittest load_testsプロトコルの汎用実装。 pkg_dir はパッケージのルートディレクトリです。 ローダーstandard_tests 、およびパターンは、load_testsで予期される引数です。 単純なケースでは、テストパッケージの__init__.pyは次のようになります。

import os
from test.support import load_package_tests

def load_tests(*args):
    return load_package_tests(os.path.dirname(__file__), *args)
test.support.fs_is_case_insensitive(directory)
ディレクトリのファイルシステムで大文字と小文字が区別されない場合は、Trueを返します。
test.support.detect_api_mismatch(ref_api, other_api, *, ignore=())

ignore で指定されたこのチェックで無視される項目の定義済みリストを除いて、 other_api で見つからない ref_api の属性、関数、またはメソッドのセットを返します。 。

デフォルトでは、これは「_」で始まるプライベート属性をスキップしますが、すべてのマジックメソッドが含まれます。 '__'で始まり '__'で終わるもの。

バージョン3.5の新機能。

test.support.patch(test_instance, object_to_patch, attr_name, new_value)
object_to_patch.attr_namenew_value でオーバーライドします。 また、 test_instance にクリーンアップ手順を追加して、 attr_nameobject_to_patch を復元します。 attr_name は、 object_to_patch の有効な属性である必要があります。
test.support.run_in_subinterp(code)
サブインタープリターで code を実行します。 tracemalloc が有効になっている場合は、 unittest.SkipTest を発生させます。
test.support.check_free_after_iterating(test, iter, cls, args=())
iter は、反復後に割り当てが解除されることを表明します。
test.support.missing_compiler_executable(cmd_names=[])
cmd_names に名前がリストされているコンパイラ実行可能ファイル、または cmd_names が空の場合はすべてのコンパイラ実行可能ファイルの存在を確認し、最初に欠落している実行可能ファイルを返すか、ない場合はNoneを返します行方不明が見つかりました。
test.support.check__all__(test_case, module, name_of_module=None, extra=(), blacklist=())

module__all__変数にすべてのパブリック名が含まれていることを表明します。

モジュールのパブリック名(そのAPI)は、パブリック名の規則に一致し、モジュールで定義されているかどうかに基づいて自動的に検出されます。

name_of_module 引数は、パブリックAPIとして検出されるためにAPIを定義できるモジュールを(文字列またはそのタプルとして)指定できます。 この1つのケースは、 module がパブリックAPIの一部を他のモジュール(おそらくCバックエンド(csvやその_csvなど)からインポートする場合)です。

extra 引数は、適切な__module__属性のないオブジェクトのように、他の方法では「パブリック」として自動的に検出されない名前のセットにすることができます。 提供されている場合は、自動的に検出されたものに追加されます。

blacklist 引数は、名前が別の方法で示している場合でも、パブリックAPIの一部として扱われてはならない名前のセットにすることができます。

使用例:

import bar
import foo
import unittest
from test import support

class MiscTestCase(unittest.TestCase):
    def test__all__(self):
        support.check__all__(self, foo)

class OtherTestCase(unittest.TestCase):
    def test__all__(self):
        extra = {'BAR_CONST', 'FOO_CONST'}
        blacklist = {'baz'}  # Undocumented name.
        # bar imports part of its API from _bar.
        support.check__all__(self, bar, ('bar', '_bar'),
                             extra=extra, blacklist=blacklist)

バージョン3.6の新機能。

test.support モジュールは、次のクラスを定義します。

class test.support.TransientResource(exc, **kwargs)
インスタンスは、指定された例外タイプが発生した場合に ResourceDenied を発生させるコンテキストマネージャーです。 キーワード引数はすべて、 with ステートメント内で発生した例外と比較される属性/値ペアとして扱われます。 すべてのペアが例外の属性と適切に一致する場合にのみ、 ResourceDenied が発生します。
class test.support.EnvironmentVarGuard

環境変数を一時的に設定または設定解除するために使用されるクラス。 インスタンスはコンテキストマネージャーとして使用でき、基になるos.environをクエリ/変更するための完全なディクショナリインターフェイスを備えています。 コンテキストマネージャーを終了すると、このインスタンスを介して行われた環境変数へのすべての変更がロールバックされます。

バージョン3.1で変更:辞書インターフェースを追加。

EnvironmentVarGuard.set(envvar, value)
環境変数envvarを一時的にvalueの値に設定します。
EnvironmentVarGuard.unset(envvar)
環境変数envvarの設定を一時的に解除します。
class test.support.SuppressCrashReport

サブプロセスのクラッシュが予想されるテストでのクラッシュダイアログポップアップの防止を試みるために使用されるコンテキストマネージャー。

Windowsでは、 SetErrorMode を使用してWindowsエラー報告ダイアログを無効にします。

UNIXでは、 resource.setrlimit()を使用して resource.RLIMIT_CORE のソフト制限を0に設定し、コアダンプファイルが作成されないようにします。

どちらのプラットフォームでも、古い値は__exit__()によって復元されます。

class test.support.CleanImport(*module_names)

インポートに新しいモジュール参照を返すように強制するコンテキストマネージャー。 これは、インポート時のDeprecationWarningの発行など、モジュールレベルの動作をテストする場合に役立ちます。 使用例:

with CleanImport('foo'):
    importlib.import_module('foo')  # New reference.
class test.support.DirsOnSysPath(*paths)

sys.pathにディレクトリを一時的に追加するコンテキストマネージャ。

これにより、 sys.path のコピーが作成され、位置引数として指定されたディレクトリが追加され、コンテキストが終了すると sys.path がコピーされた設定に戻ります。

オブジェクトの置換を含む、コンテキストマネージャの本体での all sys.path の変更は、ブロックの最後で元に戻されることに注意してください。

class test.support.SaveSignals
Pythonシグナルハンドラーによって登録されたシグナルハンドラーを保存および復元するクラス。
class test.support.Matcher
matches(self, d, **kwargs)

単一のdictを指定された引数と一致させるようにしてください。

match_value(self, k, dv, v)

単一の保存された値( dv )を指定された値( v )と一致させてみてください。

class test.support.WarningsRecorder
単体テストの警告を記録するために使用されるクラス。 詳細については、上記の check_warnings()のドキュメントを参照してください。
class test.support.BasicTestRunner
;; run(test)
test を実行して、結果を返します。
class test.support.TestHandler(logging.handlers.BufferingHandler)
ロギングサポートのクラス。
class test.support.FakePath(path)
単純なパスのようなオブジェクトpath 引数を返すだけの__fspath__()メソッドを実装します。 path が例外の場合、__fspath__()で発生します。


test.support.script_helper —Python実行テスト用のユーティリティ

test.support.script_helper モジュールは、Pythonのスクリプト実行テストのサポートを提供します。

test.support.script_helper.interpreter_requires_environment()

sys.executable interpreterを実行するために環境変数が必要な場合は、Trueを返します。

これは、@unittest.skipIf()とともに使用して、assert_python*()関数を使用して分離モード(-I)または環境モードなし( [ X167X])サブインタープリタープロセス。

通常のビルドとテストではこの状況は発生しませんが、Pythonの現在のホーム検索ロジックを備えた明確なホームがないインタープリターから標準ライブラリテストスイートを実行しようとすると発生する可能性があります。

PYTHONHOME を設定することは、そのような状況でほとんどのテストスイートを実行するための1つの方法です。 PYTHONPATH または PYTHONUSERSITEは、インタープリターが起動できるかどうかに影響を与える可能性のあるその他の一般的な環境変数です。

test.support.script_helper.run_python_until_end(*args, **env_vars)
サブプロセスでインタープリターを実行するために、 env_vars に基づいて環境をセットアップします。 値には、__isolated__cleanenv__cwd、およびTERMを含めることができます。
test.support.script_helper.assert_python_ok(*args, **env_vars)

args とオプションの環境変数 env_vars を使用してインタープリターを実行すると成功し(rc == 0)、(return code, stdout, stderr)タプルが返されることを表明します。

__cleanenvキーワードが設定されている場合、 env_vars が新しい環境として使用されます。

__isolatedキーワードがFalseに設定されている場合を除き、Pythonは分離モード(コマンドラインオプション-I)で起動されます。

test.support.script_helper.assert_python_failure(*args, **env_vars)

args とオプションの環境変数 env_vars を使用してインタープリターを実行すると失敗し(rc != 0)、(return code, stdout, stderr)タプルが返されることを表明します。

その他のオプションについては、 assert_python_ok()を参照してください。

test.support.script_helper.spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw)

指定された引数を使用してPythonサブプロセスを実行します。

kw は、 subprocess.Popen()に渡す追加のキーワード引数です。 subprocess.Popen オブジェクトを返します。

test.support.script_helper.kill_python(p)
指定された subprocess.Popen プロセスを完了するまで実行し、stdoutを返します。
test.support.script_helper.make_script(script_dir, script_basename, source, omit_suffix=False)
パス script_dir および script_basenamesource を含むスクリプトを作成します。 omit_suffixFalseの場合は、名前に.pyを追加します。 完全なスクリプトパスを返します。
test.support.script_helper.make_zip_script(zip_dir, zip_basename, script_name, name_in_zip=None)
zip_dir および zip_basename に、 script_name 内のファイルを含む拡張子zipのzipファイルを作成します。 name_in_zip はアーカイブ名です。 (full path, full path of archive name)を含むタプルを返します。
test.support.script_helper.make_pkg(pkg_dir, init_source=)
init_source を内容とする__init__ファイルを含む pkg_dir という名前のディレクトリを作成します。
test.support.script_helper.make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename, source, depth=1, compiled=False)
空の__init__ファイルとソースを含むファイル script_basename を含む zip_dirzip_basename のパスでzipパッケージディレクトリを作成しますコンパイル済みTrueの場合、両方のソースファイルがコンパイルされてzipパッケージに追加されます。 zipファイルのフルzipパスとアーカイブ名のタプルを返します。