Wie kann pytest eine Klasse namens TestSomething ignorieren? [Duplikat]

Aug 16 2020

Ich arbeite an einer Art Test-Framework, in dem TestSomethingnatürlich Klassen benannt sind . Und ich stellte fest, dass meine Tests fehlschlagen, weil pytest diese Klassen als "etwas ansieht, das ich instanziieren und ausführen muss!", Sobald sie importiert wurden. Und das wird absolut nicht funktionieren.

import pytest
from package import TestSomethingClass

Ist es möglich, eine solche Klasse direkt aus einer Pytest-Testdatei zu importieren? Oder sollte ich diese indirekt über ein Gerät verwenden?

Das gleiche Problem gilt für Ausnahmen, da ich so etwas tun müsste

with pytest.raises(TestsSomethingError):

Antworten

4 DavidJ Aug 16 2020 at 03:59

Explizit deaktivieren

Sie können pytest erlauben, diese bestimmte Klasse zu ignorieren, indem sie mit dem Wort beginnt Test, indem Sie das __test__Flag auf Falseinnerhalb Ihrer widersprüchlichen Klasse setzen

class TestSomethingClass(object):
    __test__ = False

    def test_class_something(self, object):
        pass

Merkmal: https://github.com/pytest-dev/pytest/pull/1561


Konfigurationsdatei

Wir könnten auch die Konvention in Ihrer pytest.iniDatei vollständig ändern und alle Klassennamen ignorieren, die das Wort beginnen Example. Ich rate jedoch nicht dazu, da wir möglicherweise später auf unbeabsichtigte Konsequenzen stoßen könnten.

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

Pytest-Konventionen

  • Testpräfix-Testfunktionen oder -methoden außerhalb der Klasse

  • Testpräfix-Testfunktionen oder -Methoden innerhalb von Testpräfix-Testklassen (ohne Init- Methode)

Quelle: https://docs.pytest.org/en/stable/customize.html