Jak sprawić, aby pytest ignorował klasę o nazwie TestSomething? [duplikować]

Aug 16 2020

Pracuję nad rodzajem platformy testowej, która ma klasy nazwane TestSomethingoczywiście. I zdałem sobie sprawę, że moje testy kończą się niepowodzeniem, ponieważ pytest widzi te klasy jako „coś, czego potrzebuję do utworzenia instancji i uruchomienia!” Zaraz po zaimportowaniu. I to absolutnie nie zadziała.

import pytest
from package import TestSomethingClass

Czy można zaimportować taką klasę bezpośrednio z pliku testowego pytest? A może powinienem pośrednio używać ich za pośrednictwem urządzenia?

Ten sam problem dotyczy wyjątków, ponieważ musiałbym zrobić coś takiego

with pytest.raises(TestsSomethingError):

Odpowiedzi

4 DavidJ Aug 16 2020 at 03:59

Wyraźnie wyłączone

Możesz zezwolić pytest na ignorowanie tej konkretnej klasy dzięki temu, że zaczyna się od słowa Test, ustawiając __test__flagę tak, aby Falseznajdowała się w Twojej klasie będącej w konflikcie

class TestSomethingClass(object):
    __test__ = False

    def test_class_something(self, object):
        pass

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


Plik konfiguracyjny

Moglibyśmy również całkowicie zmienić konwencję w twoim pytest.inipliku i zignorować wszystkie nazwy klas zaczynające się od słowa Example. Ale nie radzę tego, ponieważ potencjalnie możemy spotkać się z niezamierzonymi konsekwencjami w dalszej drodze.

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

Najczęstsze konwencje

  • testowanie funkcji lub metod testowych z prefiksem poza klasą

  • testowanie funkcji lub metod testowych z prefiksem testowym wewnątrz klas testowych z prefiksem Test (bez metody inicjującej )

Źródło: https://docs.pytest.org/en/stable/customize.html