Come fare in modo che Pytest ignori una classe chiamata TestSomething? [duplicare]

Aug 16 2020

Sto lavorando a una sorta di framework di test che TestSomethingovviamente ha classi nominate . E mi sono reso conto che i miei test stanno fallendo perché pytest vede queste classi come "qualcosa che devo istanziare ed eseguire!", Non appena importate. E questo assolutamente non funzionerà.

import pytest
from package import TestSomethingClass

È possibile importare tale classe direttamente da un file di test pytest? O forse dovrei usare indirettamente quelli tramite un dispositivo?

Lo stesso problema si applica alle eccezioni, poiché avrei bisogno di fare qualcosa di simile

with pytest.raises(TestsSomethingError):

Risposte

4 DavidJ Aug 16 2020 at 03:59

Disabilita esplicitamente

Puoi consentire a pytest di ignorare questa classe specifica in virtù del fatto che inizia con la parola Test, impostando la __test__bandiera Falseall'interno della tua classe in conflitto

class TestSomethingClass(object):
    __test__ = False

    def test_class_something(self, object):
        pass

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


File di configurazione

Potremmo anche cambiare completamente la convenzione nel tuo pytest.inifile e ignorare tutti i nomi di classe che iniziano la parola Example. Ma non lo consiglio, poiché potremmo potenzialmente incontrare conseguenze indesiderate lungo la strada.

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

Convenzioni Pytest

  • test funzioni di test prefissate o metodi esterni alla classe

  • test funzioni o metodi di test con prefisso all'interno di classi di test con prefisso Test (senza un metodo init )

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