2012-02-19 16 views
6

流鼻水測試時,我相當綠色Python測試,所以這可能是什麼我做錯了..的Python:Asse田與覆蓋

當我運行我的測試中,測試運行工作正常,覆蓋太..但兩者我得到斷言錯誤:

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 

爲了使事情更加困難,我想測試一個命令行工具。這意味着我必須告訴覆蓋範圍以涵蓋子進程調用。

我想我得到這部分工作,因爲報道現在報告正在運行的腳本的封面的百分比。但是由於我的覆蓋範圍工作,我無法擺脫AssertionError。

一些有助於瞭解什麼是錯誤的將非常感激。我所有的代碼可以在GitHub:

快速運行:

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

感謝

更新

我已經運行在不同的計算機上測試,我得到了相同的Asse田..加上一個新的TypeError。再次測試運行正常和覆蓋面也似乎即使有這些錯誤正常工作..

... 
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 
... 

回答

3

關於NoneType is not callable error,請看看下面的一些元素,可以幫助您。

在你的模塊plugintest.pynose-1.1.2-py2.7.egg/nose/plugins/,線174,一個可以閱讀以下行:

from multiprocessing import Manager 

這導致了multiprocessing.util包進口,並與它的退出函數進行註冊:

atexit.register(_exit_function) 

問題似乎是multiprocessing.util它加載plugintest然後被卸載之前調用_exit_function,它的功能definit順便說一下。

因此,如果您導入它在你的setup.py文件:

from multiprocessing import util 

錯誤消失。

順便說一句,我不得不在評論中測試一些地方認爲是失敗或改變一些代碼行:

  • -m命令不似乎是有效的;
  • 我不得不將duke_conf.yml重命名爲duke_conf.yml;
  • 檢查是否存在README.rstLICENSE文件的測試失敗(沒有時間檢查原因);

希望它能幫助,