Python importations pour les tests à l'aide de nez - quelle est la meilleure pratique pour les importations de modules au-dessus de package en cours

C'est une question qui est fréquemment demandé dans différentes formes, et souvent obtient "lol, vous ne le font pas correctement" les réponses. Assez sûr que c'est parce qu'il y a un sens commun scénario de gens (dont moi) sont en train de l'utiliser comme une mise en œuvre, et la solution n'est pas évidente (si vous ne l'avez pas fait avant).

Accepterait une réponse "vous permet de la sortir de la bouteille".

Donné

project/
    __init__.py
    /code
        __init__.py
        sut.py
    /tests
        __init__.py
        test_sut.py

Où tests_sut.py commence:

import code.sut

De course nosetests dans le répertoire racine conduit à:

ImportError: No module named code.sut

Avenues parcourue:

a) faire un par rapport à l'aide de

from ..code import sut

b) ajouter la racine du projet de PYTHONPATH

c) utiliser le

sys.path.append

pour ajouter le chemin .. avant que les importations au début de chaque module de test.

d) n'oubliez pas de faire un

setup.py 

sur le projet d'installer les modules dans le site-packages avant l'exécution des tests.


Ainsi, l'exigence est d'avoir des tests situé sous le package de test de racine qui ont accès au projet. Chacun des ci-dessus ne se sentent pas "naturel" pour moi, se sont avérés problématiques ou sembler trop dur travail!

En java, cela fonctionne, mais, fondamentalement, par la force de votre outil de construction /IDE de placer tous vos classes sur le chemin de la classe. Peut-être le problème est que j'attends "magie" de Python? L'avons noté dans le Flacon webframework tests, l'option d) semble être préféré.

Dans tous les cas, les déclarations ci-dessous recommander une solution serait de supprimer la sensation de "unnaturalness" dans mon propre.

InformationsquelleAutor leonigmig | 2011-07-12