2012-02-19 24 views
6

Jestem dość zielony z testów Pythona, więc to może być coś robię źle ..Python: AssertionError podczas uruchamiania testów nos pokrycia

Gdy uruchomię moich testów, biegacze testowe działa dobrze i zasięg zbyt ... ale między nimi pojawia się błąd potwierdzenia:

Traceback (most recent call last): 
    File "/usr/local/bin/coverage", line 9, in <module> 
    load_entry_point('coverage==3.5.1', 'console_scripts', 'coverage')() 
    File "/usr/local/lib/python2.7/dist-packages/coverage/cmdline.py", line 657, in main 
    status = CoverageScript().command_line(argv) 
    File "/usr/local/lib/python2.7/dist-packages/coverage/cmdline.py", line 526, in command_line 
    self.coverage.stop() 
    File "/usr/local/lib/python2.7/dist-packages/coverage/control.py", line 389, in stop 
    self.collector.stop() 
    File "/usr/local/lib/python2.7/dist-packages/coverage/collector.py", line 262, in stop 
    assert self._collectors[-1] is self 
AssertionError 

Aby coś było trudniejsze, próbuję przetestować narzędzie wiersza poleceń. Co oznacza, że ​​musiałem poinformować o pokryciu wywołań podprocesowych.

Wydaje mi się, że ta część działa, ponieważ zasięg obejmuje teraz% okładki dla uruchamianego skryptu. Ale odkąd mam zasięg pracy, nie mogę pozbyć się AssertionError.

Niektórzy mogą pomóc zrozumieć, co jest nie tak. Cały mój kod jest dostępny na github:

Szybkie Run:

cd /tmp/ && git clone git://github.com/h3/django-duke-client.git 
cd django-duke-client && chmod a+x run_tests && ./run_tests 

Dzięki

Aktualizacja

Zabrakło mi test na innym komputerze i mam ten sam AssertionError .. Plus nowy TypeError. Ponownie badania przebiega prawidłowo i zasięg, również wydaje się działać poprawnie, nawet z tymi błędami ..

... 
Ran 9 tests in 1.324s 

OK 
Traceback (most recent call last): 
    File "/usr/local/bin/coverage", line 9, in <module> 
    load_entry_point('coverage==3.5.1', 'console_scripts', 'coverage')() 
    File "/usr/local/lib/python2.7/dist-packages/coverage/cmdline.py", line 657, in main 
    status = CoverageScript().command_line(argv) 
    File "/usr/local/lib/python2.7/dist-packages/coverage/cmdline.py", line 526, in command_line 
    self.coverage.stop() 
    File "/usr/local/lib/python2.7/dist-packages/coverage/control.py", line 389, in stop 
    self.collector.stop() 
    File "/usr/local/lib/python2.7/dist-packages/coverage/collector.py", line 262, in stop 
    assert self._collectors[-1] is self 
AssertionError 
Error in atexit._run_exitfuncs: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/atexit.py", line 24, in _run_exitfuncs 
    func(*targs, **kargs) 
    File "/usr/lib/python2.7/multiprocessing/util.py", line 284, in _exit_function 
    info('process shutting down') 
TypeError: 'NoneType' object is not callable 
Error in sys.exitfunc: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/atexit.py", line 24, in _run_exitfuncs 
    func(*targs, **kargs) 
    File "/usr/lib/python2.7/multiprocessing/util.py", line 284, in _exit_function 
    info('process shutting down') 
TypeError: 'NoneType' object is not callable 

Name        Stmts Miss Branch BrPart Cover Missing 
------------------------------------------------------------------------------ 
dukeclient/__init__     53  53  2  0  4% 1-93 
dukeclient/commands/__init__   41  33  6  2 26% 1-9, 12, 14-15, 17, 24-28, 34-43, 46-63 
... 

Odpowiedz

3

Odnośnie NoneType is not callable error, proszę znaleźć poniżej pewnych elementów, które mogą Ci pomóc.

W module plugintest.py z nose-1.1.2-py2.7.egg/nose/plugins/, linia 174, można przeczytać następującą linię:

from multiprocessing import Manager 

Prowadzi pakiet multiprocessing.util być importowane, a wraz z nim funkcję exit być zarejestrowany:

atexit.register(_exit_function) 

Problem polega na tym, że multiprocessing.util, który jest ładowany w plugintest, jest następnie rozładowywany przed wywołaniem _exit_function, a jego funkcja jest określona Jony przy okazji.

Tak więc, jeśli zaimportować je w pliku setup.py:

from multiprocessing import util 

Błąd zniknie.

Nawiasem mówiąc, musiałem skomentować niektóre części w testach, które zostały upadające lub zmienić kilka linijek kodu:

  • komenda -m nie wydaje się być ważne;
  • Musiałem zmienić nazwę duke_conf.yml na duke_conf.yml;
  • Testy sprawdzające, czy istnieją pliki i LICENSE, nie działają (nie zdążyły sprawdzić przyczyny);

Mam nadzieję, że to pomoże,

Powiązane problemy