Test de l'échec de la découverte lors de tests dans différents répertoires sont appelés les mêmes
À l'aide de py.test, deux tests appelée la même dans les différents répertoire causes py.test à l'échec. Pourquoi est-ce? Comment puis-je changer cela sans le renommer tous les tests?
De dupliquer n':
; cd /var/tmp/my_test_module
; mkdir -p ook/test
; mkdir -p eek/test
; touch ook/test/test_proxy.py
; touch eek/test/test_proxy.py
; py.test
============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.2.4
collected 0 items / 1 errors
==================================== ERRORS ====================================
___________________ ERROR collecting ook/test/test_proxy.py ____________________
import file mismatch:
imported module 'test_proxy' has this __file__ attribute:
/home/ygolanski/code/junk/python/mymodule/eek/test/test_proxy.py
which is not the same as the test file we want to collect:
/home/ygolanski/code/junk/python/mymodule/ook/test/test_proxy.py
HINT: remove __pycache__ / .pyc files and/or use a unique basename for your test file modules
=========================== 1 error in 0.01 seconds ============================
Vous devez vous connecter pour publier un commentaire.
Mettre un
__init__.py
est une façon de résoudre le conflit. À la différence de nez, actuel pytest ne pas essayer de décharger les modules de test afin d'importer des modules de test avec le même nom d'importation. J'ai l'habitude de penser que c'est un peu de la magie pour faire cette auto-unimporting et pourrait gâcher les gens s'attendent à ce que le mécanisme d'importation n'; parfois, les gens comptent sur l'état global d'un module de test et d'auto-déchargement de vous perdre (un module de test de l'importation à partir d'un autre module de test peut alors faire des choses inattendues). Mais peut-être que ce n'est pas une question pratique et donc pytest pourrait ajouter une telle bidouille ...__init__.py
dans les répertoires de tests: "éviter__init__.py
fichiers dans vos répertoires de tests. De cette façon, vos tests peuvent courir facilement contre une version installée de mypkg, indépendamment de si le paquet contient les tests ou pas". Prises à partir de pytest.org - les Bonnes Pratiques d'Intégration.__init__.py
dans les répertoires de tests, il semble donc que l'on a accepté la réponse est la bonne.from __future__ import absolute_import
sur certains de mes fichiers de test, en retirant qui a résolu le problème.__ini__.py
s _(ツ)_/. A fonctionné pour moi jusqu'à présent.C'est une réelle fonction de py.test. Vous pouvez trouver la raison de ce comportement a déclaré dans pytest.org - les Bonnes Pratiques d'Intégration - le Choix d'un test de mise en page /importer des règles:
Comme c'est recommandé de flux de travail de travail avec py.test: installer le paquet en cours de développement avec
pip install -e
, puis le tester.De ce fait, je me suis opter pour l'unique essai de noms, dans la convention over configuration manière. Il s'assure également que vous n'obtenez pas de test ambiguë noms dans les différents test de sortie.
Si vous avez besoin de garder les noms de tests et ne se soucient pas des fonctionnalités mentionnées ci-dessus, vous devriez être ok avec mettre
__init__.py
.mypkg
. De cette façon, l'existence de tests. J'ai créer__init__.py
fichiers pour éviter cette "unique " basename" message d'erreur.J'ai eu le même message d'erreur, mais la solution n'a rien à voir avec les fichiers d'initialisation, ni le nom sur les fichiers de test. J'ai eu différentes versions de python sur mon macbook et sur mon Docker conteneur. J'ai lancé les tests une fois dans le bash à partir du macbook à la racine du projet, au lieu de la fête du conteneur.
La solution a été de supprimer le tort fichiers créés par l'exécution (de la fête du conteneur):
Puis lancez de nouveau le test (toujours à partir de la fête de l'emballage) et tout a très bien fonctionné:
Vous pouvez ajouter la variable d'environnement suivante à votre bash fichier init ou quelque part d'autre dans votre pile de développement pour éviter ces dossiers/fichiers générés en premier lieu