0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[第5章確認問題]Crafting Test-Driven Software with Python

Posted at

第5章「Introduction to PyTest」理解度確認テスト(4択問題)

  1. PyTestがテストをどのように発見するか
    PyTestがデフォルトでテストとして認識する要素として、最も適切な説明はどれですか?
    A. unittest.TestCaseを継承したクラス内のtest_で始まるメソッドのみ
    B. test_またはTestで始まるモジュール、クラス、関数
    C. TestCaseという名前のクラス内のtest_で始まるメソッド
    D. pytest.main()によって明示的に登録された関数のみ

    正解と解説 **B. `test_`または`Test`で始まるモジュール、クラス、関数** PyTestは、`unittest.TestCase`クラスを継承したクラスを探すだけでなく、名前に`test`を含むモジュール、クラス、関数をテストとして認識します。必要に応じて`pytest.ini`で発見ルールを変更することも可能です。
  2. PyTestにおけるassert文の機能強化
    PyTestのassert文は、テストが失敗した場合にどのような情報を提供することで、unittestよりも強化されていますか?
    A. エラーメッセージのみを表示し、詳細な変数の値は手動で確認する必要がある。
    B. unittestassertEqualのような専用のアサーションメソッドを使用しないと詳細な情報は得られない。
    C. アサートされた式の利用可能な情報を可能な限り多くレポートする。
    D. 常にスタックトレース全体を表示し、詳細な変数の値は表示しない。

    正解と解説 **C. アサートされた式の利用可能な情報を可能な限り多くレポートする** PyTestは、標準の`assert`文を強化し、テストが失敗した場合にアサートされた式に関する利用可能な情報を可能な限り多くレポートします。これにより、テストがなぜ失敗したのかを理解しやすくなります。
  3. PyTestフィクスチャの宣言方法
    PyTestでフィクスチャを宣言するために使用する正しいデコレータはどれですか?
    A. @pytest.test
    B. @pytest.fixture
    C. @pytest.setup
    D. @pytest.hook

    正解と解説 **B. `@pytest.fixture`** PyTestでは、`pytest.fixture`デコレータを使用してフィクスチャを宣言します。このデコレータが付けられた関数はフィクスチャとして扱われます。
  4. PyTestフィクスチャのライフサイクル(スコープ)
    PyTestフィクスチャの適用範囲(ライフサイクル)を、テストクラス全体にわたって有効にするには、@pytest.fixtureデコレータのscopeオプションにどの値を設定しますか?
    A. "function"
    B. "module"
    C. "class"
    D. "session"

    正解と解説 **C. `"class"`** `scope="class"`を設定することで、フィクスチャはテストクラス全体にわたって一度だけ実行され、そのクラス内のすべてのテストで利用可能になります。他のスコープとして、`"function"` (テスト関数ごとに実行)、`"module"` (モジュールごとに実行)、`"session"` (テストセッション全体で一度だけ実行) があります。
  5. PyTestフィクスチャのyield文の役割
    PyTestフィクスチャのyield文は、unittestモジュールにおけるどのメソッドの振る舞いに対応しますか?
    A. setUpメソッドとtearDownメソッドの両方
    B. setUpメソッドのみ
    C. tearDownメソッドのみ
    D. setUpClassメソッドのみ

    正解と解説 **A. `setUp`メソッドと`tearDown`メソッドの両方** PyTestフィクスチャでは、`yield`文より前のコードがテストの開始前に実行され(`unittest`の`setUp`に相当)、`yield`文より後のコードがテストの終了後に実行されます(`unittest`の`tearDown`に相当)。
  6. tmp_pathフィクスチャの主な用途
    tmp_pathフィクスチャの主な用途として最も適切なものは何ですか?
    A. データベース接続情報を一時的に保存するため。
    B. テスト実行ごとに異なる一時ディレクトリを提供し、一時データを管理するため。
    C. テスト中のHTTPリクエストをモックするため。
    D. テストのパフォーマンスを計測するためのベンチマークデータを提供するため。

    正解と解説 **B. テスト実行ごとに異なる一時ディレクトリを提供し、一時データを管理するため** `tmp_path`フィクスチャは、テスト実行ごとに異なる一時パスを提供し、テスト中に作成される一時データの管理に役立ちます。これにより、異なるテスト実行間でデータが干渉するのを防ぎます。
  7. capsysフィクスチャの用途
    capsysフィクスチャはどのような目的で使用されますか?
    A. テスト関数の引数を動的に生成するため。
    B. テスト対象のアプリケーションが出力する標準出力(sys.stdout)や標準エラー(sys.stderr)をキャプチャするため。
    C. 不安定なテストを自動的にリトライするため。
    D. テスト実行を並列化するため。

    正解と解説 **B. テスト対象のアプリケーションが出力する標準出力(`sys.stdout`)や標準エラー(`sys.stderr`)をキャプチャするため** `capsys`フィクスチャは、アプリケーションの標準出力や標準エラーをキャプチャし、その内容をテストで検証するために使用されます。
  8. PyTestでのテストサブセット実行方法(マーカー機能)
    PyTestでテストスイートのサブセットを実行する際、従来のディレクトリ指定や-kオプション以外に、どの機能を使用してテストをグループ化し、選択的に実行できますか?
    A. --filterオプション
    B. unittest.TestSuiteクラス
    C. マーカー(@pytest.mark.marker
    D. 環境変数

    正解と解説 **C. マーカー(`@pytest.mark.marker`)** PyTestでは、`@pytest.mark.marker`デコレータを使用してテストにカスタムラベル(マーカー)を付けることで、ディレクトリや名前に関係なくテストをグループ化し、`pytest -m marker`などのコマンドで選択的に実行できます。
  9. カスタムマーカー使用時の警告とその解消法
    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`ファイルにマーカーを登録する必要があります。
  10. PyTestフィクスチャの依存性注入の仕組み
    PyTestフィクスチャがテスト関数にオブジェクトを提供する際、どのようにしてそのオブジェクトが注入されますか?
    A. テスト関数が@pytest.mark.usefixturesデコレータでフィクスチャ名を指定する。
    B. テスト関数がフィクスチャと同じ名前の引数を持つことで、PyTestが自動的に解決する。
    C. テスト関数内でpytest.get_fixture()を呼び出して取得する。
    D. フィクスチャがグローバル変数としてオブジェクトを登録する。

    正解と解説 **B. テスト関数がフィクスチャと同じ名前の引数を持つことで、PyTestが自動的に解決する** テスト関数が引数を持っている場合、PyTestはその引数名と同じ名前のフィクスチャを自動的に探し、そのフィクスチャが提供するオブジェクトをテスト関数に注入します。これは依存性注入の一種です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?