2015-04-04 52 views
8

我的測試清楚地執行每個功能,並且沒有未使用的導入。燒瓶測試 - 爲什麼覆蓋率排除導入語句和裝飾器?

enter image description here

可有人請指出我可能是做錯了:不過,根據覆蓋報告,代碼的62%是從來沒有在以下文件中執行?

下面是如何初始化測試套件和覆蓋範圍:

cov = coverage(branch=True, omit=['website/*', 'run_test_suite.py']) 
    cov.start() 

    try: 
     unittest.main(argv=[sys.argv[0]]) 
    except: 
     pass 

    cov.stop() 
    cov.save() 

    print "\n\nCoverage Report:\n" 
    cov.report() 

    print "HTML version: " + os.path.join(BASEDIR, "tmp/coverage/index.html") 
    cov.html_report(directory='tmp/coverage') 
    cov.erase() 

回答

7

這是coverage.py FAQ第三個問題:

問:爲什麼函數(或類)的屍體展作爲執行,但 高清線不?

發生這種情況是因爲在定義了功能 之後開始覆蓋。定義行的執行沒有覆蓋 測量,然後覆蓋開始,然後調用該函數。 這意味着身體被測量,但功能本身的定義不是。

要解決這個問題,請儘早開始覆蓋。如果您使用命令行 運行覆蓋範圍的程序,那麼您的整個程序將被監視 。如果您使用的是API,則需要在導入定義函數的模塊之前調用coverage.start() 。

$ coverage run -m unittest discover 

您的自定義測試腳本沒有做太多超出覆蓋範圍的命令行會做,這將是簡單的只是使用:

做最簡單的做法是根據覆蓋運行你的測試命令行。