[Python] Conflitto import path con nose
Marco Giusti
marco.giusti a posteo.de
Gio 6 Ago 2015 10:07:23 CEST
On Wed, Aug 05 2015, Manlio Perillo wrote:
> 2015-08-05 19:00 GMT+02:00 Marco Giusti <marco.giusti a posteo.de>:
>
> > On Wed, Aug 05 2015, Manlio Perillo wrote:
> > > Oggi per la prima volta sto lavorando ad un progetto che contiene più di
> > un
> > > package:
> > >
> > > pkg/
> > > foo/
> > > bar/
> > > test/
> > > foo/
> > > bar/
> > >
> > > La directory `test` contiene la test suite.
> > >
> > > Il problema è che quando eseguo i test con nosetests, l'istruzione
> > > `import foo` importa il package da `pkg/test/foo` invece che `pkg/foo`.
> >
> > > [...]
>
> > > Qualcuno può confermare il problema e suggerire una soluzione?
> >
> > Non saprei dirti, il semplice test che ho fatto sembra funzionare.
> >
>
> Usi Python 3 o Python 2?
> Io sto usando Python 2.
Non mi ero neanche posto il problema. Python 2.7.9, nose installato con
pip.
> > La prima cosa che ho pensato è che nose cambiasse il path corrente e,
> > per esempio, trovandosi in test/, importasse i moduli sbalgiati.
>
>
> Lo fa.
> Senza l'opzione -P aggiunge la directory che sta testando all'inizio di
> sys.path.
>
> La cosa strana e che non capisco è che ottengo il comportamento sbagliato
> anche se aggiungo l'opzione.
>
> > [...]
$ nosetests
..
----------------------------------------------------------------------
Ran 2 tests in 0.030s
OK
$ nosetests test/
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
$ rm test/__init__.py
$ nosetests
..
----------------------------------------------------------------------
Ran 2 tests in 0.008s
OK
$ nosetests test/
EE
======================================================================
ERROR: test.bar.test_bar.test_whoami
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/marco/.virtualenvs/test/local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/home/marco/.virtualenvs/test/src/pythonpkg/test/bar/test_bar.py", line 4, in test_whoami
assert bar.whoami() == "bar.__init__"
AttributeError: 'module' object has no attribute 'whoami'
======================================================================
ERROR: test.foo.test_foo.test_whoami
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/marco/.virtualenvs/test/local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/home/marco/.virtualenvs/test/src/pythonpkg/test/foo/test_foo.py", line 4, in test_whoami
assert foo.whoami() == "foo.__init__"
AttributeError: 'module' object has no attribute 'whoami'
----------------------------------------------------------------------
Ran 2 tests in 0.002s
FAILED (errors=2)
$ nosetests -P test/
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
Ti faccio notare che lo stesso comportamento, vista la struttura del
package, lo ottengo con o senza "develop". Una cosa che prenderei in
considerazione, e forse lo hai già fatto, è di mettere i test dentro i
package. Trovo comodo effettuare i test anche in fase di deploying,
soprattutto visto il tempo richiesto per scriverli e mantenerli.
Spiacente di non essere più di aiuto.
Ciao
Marco
Maggiori informazioni sulla lista
Python