第5章「Introduction to PyTest」理解度確認テスト(4択問題)
-
PyTestがテストをどのように発見するか
PyTestがデフォルトでテストとして認識する要素として、最も適切な説明はどれですか?
A.unittest.TestCase
を継承したクラス内のtest_
で始まるメソッドのみ
B.test_
またはTest
で始まるモジュール、クラス、関数
C.TestCase
という名前のクラス内のtest_
で始まるメソッド
D.pytest.main()
によって明示的に登録された関数のみ正解と解説
**B. `test_`または`Test`で始まるモジュール、クラス、関数** PyTestは、`unittest.TestCase`クラスを継承したクラスを探すだけでなく、名前に`test`を含むモジュール、クラス、関数をテストとして認識します。必要に応じて`pytest.ini`で発見ルールを変更することも可能です。 -
PyTestにおける
assert
文の機能強化
PyTestのassert
文は、テストが失敗した場合にどのような情報を提供することで、unittest
よりも強化されていますか?
A. エラーメッセージのみを表示し、詳細な変数の値は手動で確認する必要がある。
B.unittest
のassertEqual
のような専用のアサーションメソッドを使用しないと詳細な情報は得られない。
C. アサートされた式の利用可能な情報を可能な限り多くレポートする。
D. 常にスタックトレース全体を表示し、詳細な変数の値は表示しない。正解と解説
**C. アサートされた式の利用可能な情報を可能な限り多くレポートする** PyTestは、標準の`assert`文を強化し、テストが失敗した場合にアサートされた式に関する利用可能な情報を可能な限り多くレポートします。これにより、テストがなぜ失敗したのかを理解しやすくなります。 -
PyTestフィクスチャの宣言方法
PyTestでフィクスチャを宣言するために使用する正しいデコレータはどれですか?
A.@pytest.test
B.@pytest.fixture
C.@pytest.setup
D.@pytest.hook
正解と解説
**B. `@pytest.fixture`** PyTestでは、`pytest.fixture`デコレータを使用してフィクスチャを宣言します。このデコレータが付けられた関数はフィクスチャとして扱われます。 -
PyTestフィクスチャのライフサイクル(スコープ)
PyTestフィクスチャの適用範囲(ライフサイクル)を、テストクラス全体にわたって有効にするには、@pytest.fixture
デコレータのscope
オプションにどの値を設定しますか?
A."function"
B."module"
C."class"
D."session"
正解と解説
**C. `"class"`** `scope="class"`を設定することで、フィクスチャはテストクラス全体にわたって一度だけ実行され、そのクラス内のすべてのテストで利用可能になります。他のスコープとして、`"function"` (テスト関数ごとに実行)、`"module"` (モジュールごとに実行)、`"session"` (テストセッション全体で一度だけ実行) があります。 -
PyTestフィクスチャの
yield
文の役割
PyTestフィクスチャのyield
文は、unittest
モジュールにおけるどのメソッドの振る舞いに対応しますか?
A.setUp
メソッドとtearDown
メソッドの両方
B.setUp
メソッドのみ
C.tearDown
メソッドのみ
D.setUpClass
メソッドのみ正解と解説
**A. `setUp`メソッドと`tearDown`メソッドの両方** PyTestフィクスチャでは、`yield`文より前のコードがテストの開始前に実行され(`unittest`の`setUp`に相当)、`yield`文より後のコードがテストの終了後に実行されます(`unittest`の`tearDown`に相当)。 -
tmp_path
フィクスチャの主な用途
tmp_path
フィクスチャの主な用途として最も適切なものは何ですか?
A. データベース接続情報を一時的に保存するため。
B. テスト実行ごとに異なる一時ディレクトリを提供し、一時データを管理するため。
C. テスト中のHTTPリクエストをモックするため。
D. テストのパフォーマンスを計測するためのベンチマークデータを提供するため。正解と解説
**B. テスト実行ごとに異なる一時ディレクトリを提供し、一時データを管理するため** `tmp_path`フィクスチャは、テスト実行ごとに異なる一時パスを提供し、テスト中に作成される一時データの管理に役立ちます。これにより、異なるテスト実行間でデータが干渉するのを防ぎます。 -
capsys
フィクスチャの用途
capsys
フィクスチャはどのような目的で使用されますか?
A. テスト関数の引数を動的に生成するため。
B. テスト対象のアプリケーションが出力する標準出力(sys.stdout
)や標準エラー(sys.stderr
)をキャプチャするため。
C. 不安定なテストを自動的にリトライするため。
D. テスト実行を並列化するため。正解と解説
**B. テスト対象のアプリケーションが出力する標準出力(`sys.stdout`)や標準エラー(`sys.stderr`)をキャプチャするため** `capsys`フィクスチャは、アプリケーションの標準出力や標準エラーをキャプチャし、その内容をテストで検証するために使用されます。 -
PyTestでのテストサブセット実行方法(マーカー機能)
PyTestでテストスイートのサブセットを実行する際、従来のディレクトリ指定や-k
オプション以外に、どの機能を使用してテストをグループ化し、選択的に実行できますか?
A.--filter
オプション
B.unittest.TestSuite
クラス
C. マーカー(@pytest.mark.marker
)
D. 環境変数正解と解説
**C. マーカー(`@pytest.mark.marker`)** PyTestでは、`@pytest.mark.marker`デコレータを使用してテストにカスタムラベル(マーカー)を付けることで、ディレクトリや名前に関係なくテストをグループ化し、`pytest -m marker`などのコマンドで選択的に実行できます。 -
カスタムマーカー使用時の警告とその解消法
PyTestでカスタムマーカー(例:@pytest.mark.first
)を使用すると、「Unknown pytest.mark.first - is this a typo? You can register custom marks to avoid this warning
」という警告が表示されることがあります。この警告を避けるための正しい対処法は何ですか?
A. PyTestのバージョンをアップグレードする。
B. カスタムマーカーをunittest.TestCase
クラスに登録する。
C. プロジェクトのpytest.ini
ファイルにマーカーを登録する。
D.@pytest.mark.skip
デコレータを使用する。正解と解説
**C. プロジェクトの`pytest.ini`ファイルにマーカーを登録する** この警告は、PyTestがカスタムマーカーを認識していないために表示されます。警告を避けるためには、プロジェクトのルートディレクトリにある`pytest.ini`ファイルにマーカーを登録する必要があります。 -
PyTestフィクスチャの依存性注入の仕組み
PyTestフィクスチャがテスト関数にオブジェクトを提供する際、どのようにしてそのオブジェクトが注入されますか?
A. テスト関数が@pytest.mark.usefixtures
デコレータでフィクスチャ名を指定する。
B. テスト関数がフィクスチャと同じ名前の引数を持つことで、PyTestが自動的に解決する。
C. テスト関数内でpytest.get_fixture()
を呼び出して取得する。
D. フィクスチャがグローバル変数としてオブジェクトを登録する。正解と解説
**B. テスト関数がフィクスチャと同じ名前の引数を持つことで、PyTestが自動的に解決する** テスト関数が引数を持っている場合、PyTestはその引数名と同じ名前のフィクスチャを自動的に探し、そのフィクスチャが提供するオブジェクトをテスト関数に注入します。これは依存性注入の一種です。