pytestにTestSomethingという名前のクラスを無視させる方法は?[複製]

Aug 16 2020

TestSomethingもちろん、たまたま名前の付いたクラスがある一種のテストフレームワークに取り組んでいます。そして、pytestはこれらのクラスをインポートするとすぐに「インスタンス化して実行する必要があるもの」と見なすため、テストが失敗していることに気付きました。そして、これは絶対に機能しません。

import pytest
from package import TestSomethingClass

そのようなクラスをpytestテストファイルから直接インポートすることは可能ですか?それとも、フィクスチャを介して間接的にそれらを使用する必要がありますか?

同じ問題が例外にも当てはまります。次のようなことをする必要があるからです。

with pytest.raises(TestsSomethingError):

回答

4 DavidJ Aug 16 2020 at 03:59

明示的に無効にする

競合するクラス内にフラグをTest設定することにより、単語で始まるこの特定のクラスをpytestが無視できるようにすることができます。__test__False

class TestSomethingClass(object):
    __test__ = False

    def test_class_something(self, object):
        pass

特徴: https://github.com/pytest-dev/pytest/pull/1561


構成ファイル

また、pytest.iniファイル内の規則を完全に変更し、単語で始まるすべてのクラス名を無視することもできますExample。しかし、将来的に意図しない結果に遭遇する可能性があるため、これについてはお勧めしません。

#pytest.ini file
[pytest]
python_classes = !Example

Pytestコンベンション

  • クラス外の接頭辞付きテスト関数またはメソッドをテストする

  • テストプレフィックス付きテスト関数またはテストプレフィックス付きテストクラス内のメソッド(initメソッドなし)

ソース: https://docs.pytest.org/en/stable/customize.html