test —Python用の回帰テストパッケージ
ノート
test パッケージは、Pythonによる内部使用のみを目的としています。 Pythonのコア開発者のために文書化されています。 ここに記載されているコードは、Pythonのリリース間で予告なしに変更または削除される可能性があるため、Pythonの標準ライブラリの外部でこのパッケージを使用することはお勧めしません。
test パッケージには、Pythonのすべての回帰テストと、モジュール test.support およびtest.regrtest
が含まれています。 test.support はテストを強化するために使用され、test.regrtest
はテストスイートを駆動します。
名前がtest_
で始まる test パッケージの各モジュールは、特定のモジュールまたは機能のテストスイートです。 すべての新しいテストは、 unittest または doctest モジュールを使用して作成する必要があります。 一部の古いテストは、sys.stdout
に出力された出力を比較する「従来の」テストスタイルを使用して記述されています。 このスタイルのテストは非推奨と見なされます。
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
詳細出力が有効な場合。 実行中のテストについてより詳細な情報が必要な場合は、チェックする必要があります。 verbose はtest.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)
- test を set_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)
を返します。verbosity が
None
の場合、 doctest.testmod()は、vervosityを verbose に設定して実行されます。 それ以外の場合は、詳細度をNone
に設定して実行されます。 optionflags はoptionflags
として 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 が提供されている場合、またはオプションのキーワード引数 quick がFalse
の場合、警告が期待どおりであることを確認します。指定された各フィルターは必須です。同封のコードによって発生した警告の少なくとも1つに一致するか、テストが失敗し、指定されたフィルターのいずれにも一致しない警告が発生した場合、テストは失敗します。 これらの最初のチェックを無効にするには、 quick をTrue
に設定します。引数が指定されていない場合、デフォルトで次のようになります。
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 に一時ディレクトリを作成し、そのディレクトリを生成するコンテキストマネージャ。
path が
None
の場合、一時ディレクトリは tempfile.mkdtemp()を使用して作成されます。 quick がFalse
の場合、コンテキストマネージャーはエラー時に例外を発生させます。 それ以外の場合、パスが指定されていて作成できない場合は、警告のみが発行されます。
- test.support.change_cwd(path, quiet=False)
現在の作業ディレクトリを一時的に path に変更し、ディレクトリを生成するコンテキストマネージャ。
quick が
False
の場合、コンテキストマネージャーはエラー時に例外を発生させます。 それ以外の場合は、警告のみを発行し、現在の作業ディレクトリを同じに保ちます。
- test.support.temp_cwd(name='tempcwd', quiet=False)
新しいディレクトリを一時的に作成し、現在の作業ディレクトリ(CWD)を変更するコンテキストマネージャ。
コンテキストマネージャは、現在の作業ディレクトリを一時的に変更する前に、 name という名前で現在のディレクトリに一時ディレクトリを作成します。 name が
None
の場合、一時ディレクトリは tempfile.mkdtemp()を使用して作成されます。quiet が
False
であり、CWDを作成または変更できない場合、エラーが発生します。 それ以外の場合は、警告のみが発生し、元のCWDが使用されます。
- test.support.temp_umask(umask)
- プロセスのumaskを一時的に設定するコンテキストマネージャー。
- test.support.transient_internet(resource_name, *, timeout=30.0, errnos=())
- インターネット接続に関するさまざまな問題が例外として現れたときに ResourceDenied を発生させるコンテキストマネージャー。
- test.support.disable_faulthandler()
sys.stderr
をsys.__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に設定され、ブロックの最後で古い値が復元されます。attr
がobj
に存在しない場合は、ブロックの最後で作成および削除されます。古い値(または存在しない場合は
None
)は、「as」句がある場合はそのターゲットに割り当てられます。
- test.support.swap_item(obj, attr, new_val)
アイテムを新しいオブジェクトと交換するためのコンテキストマネージャー。
使用法:
with swap_item(obj, "item", 5): ...
これにより、
with
ブロックの期間中obj["item"]
が5に設定され、ブロックの最後で古い値が復元されます。item
がobj
に存在しない場合は、ブロックの最後で作成および削除されます。古い値(または存在しない場合は
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)
- テストケーステストの場合、 o の
sys.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_run が
True
の場合、テストメソッドに渡される値が要求された値よりも小さい可能性があります。 dry_run がFalse
の場合、-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 の文字列表現と一致する必要がある正規表現です。 lineno が
None
でない場合、例外の行と比較します。 offset がNone
でない場合、例外のオフセットと比較します。
- test.support.check_syntax_warning(testcase, statement, errtext=, *, lineno=1, offset=None)
ステートメントのコンパイルを試みて、ステートメントの構文警告をテストします。 また、 SyntaxWarning が1回だけ発行され、エラーになると SyntaxError に変換されることもテストします。 testcase は、テストの unittest インスタンスです。 errtext は、発行された SyntaxWarning および発生した SyntaxError の文字列表現と一致する必要がある正規表現です。 lineno が
None
でない場合、警告および例外の行と比較します。 offset がNone
でない場合、例外のオフセットと比較します。バージョン3.8の新機能。
- test.support.open_urlresource(url, *args, **kw)
- url を開きます。 openが失敗した場合、 TestFailed を発生させます。
- test.support.import_module(name, deprecated=False, *, required_on())
この関数は、指定されたモジュールをインポートして返します。 通常のインポートとは異なり、この関数は、モジュールをインポートできない場合に unittest.SkipTest を発生させます。
deprecated が
True
の場合、モジュールとパッケージの非推奨メッセージはこのインポート中に抑制されます。 モジュールがプラットフォームで必須であるが、他のプラットフォームではオプションである場合は、 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
に再挿入されます。deprecated が
True
の場合、モジュールとパッケージの非推奨メッセージはこのインポート中に抑制されます。指定されたモジュールをインポートできない場合、この関数は 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)
- 内部キャッシュを保持するために、 oldmodules と
encodings
以外のモジュールを削除します。
- 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.family
が AF_INET で、sock.type
が SOCK_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_INET 、 SOCK_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_name を new_value でオーバーライドします。 また、 test_instance にクリーンアップ手順を追加して、 attr_name の object_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_basename に source を含むスクリプトを作成します。 omit_suffix が
False
の場合は、名前に.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_dir と zip_basename のパスでzipパッケージディレクトリを作成します。 コンパイル済みがTrue
の場合、両方のソースファイルがコンパイルされてzipパッケージに追加されます。 zipファイルのフルzipパスとアーカイブ名のタプルを返します。