Comment faire en sorte que pytest ignore une classe nommée TestSomething? [dupliquer]

Aug 16 2020

Je travaille sur une sorte de framework de test qui a des classes nommées TestSomethingbien sûr. Et j'ai réalisé que mes tests échouaient parce que pytest voit ces classes comme "quelque chose dont je dois instancier et exécuter!", Dès l'importation. Et cela ne fonctionnera absolument pas.

import pytest
from package import TestSomethingClass

Est-il possible d'importer une telle classe directement à partir d'un fichier de test pytest? Ou devrais-je les utiliser indirectement via un appareil?

Le même problème s'applique aux exceptions, car je devrais faire quelque chose comme

with pytest.raises(TestsSomethingError):

Réponses

4 DavidJ Aug 16 2020 at 03:59

Désactiver explicitement

Vous pouvez autoriser pytest à ignorer cette classe spécifique en commençant par le mot Test, en définissant l' __test__indicateur Falsedans votre classe en conflit

class TestSomethingClass(object):
    __test__ = False

    def test_class_something(self, object):
        pass

fonctionnalité: https://github.com/pytest-dev/pytest/pull/1561


Fichier de configuration

Nous pourrions également changer complètement la convention dans votre pytest.inifichier et ignorer tous les noms de classe qui commencent le mot Example. Mais je ne conseille pas cela, car nous pourrions potentiellement rencontrer des conséquences imprévues sur la route.

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

Conventions Pytest

  • tester les fonctions ou méthodes de test préfixées en dehors de la classe

  • tester les fonctions ou méthodes de test préfixées dans les classes de test préfixées Test (sans méthode init )

La source: https://docs.pytest.org/en/stable/customize.html