2017-11-11 80 views
0

上下文

我有一個python應用程序,我正在進行單元測試。一半的應用程序正在工作,我的測試精度非常高。Python覆蓋率 - 跳過或模擬輸入法

該應用程序需要一次性用戶輸入用於安裝目的。

這意味着,如果您運行代碼,必須與用戶進行交互。


問題

Coverage是一個Python插件覆蓋報告。我使用這個命令覆蓋:

coverage run application.py 

覆蓋率運行我的應用程序,通過我的測試,並提供覆蓋率報告。

問題是命令運行這些測試,執行我的應用程序,我必須提供輸入。這不是什麼大不了的事情,但我不能在我的CI服務器上使用Jenkins(或者我可以嗎?)做到這一點。


問題

我想運行,而無需用戶輸入的覆蓋工具。在我的測試中,input函數被嘲笑。運行所有我的測試沒有覆蓋工作正常。我如何防止覆蓋需要用戶輸入?

回答

1

你或許應該有2條不同的代碼路徑,一個用於運行測試,以及一個用於運行應用程序:

coverage run tests.py 

tests.py進口application.py,必要時嘲諷方法,那麼在運行實際的應用程序。

或者你可以允許通過命令行參數的用戶輸入:

coverage run application.py --user=input --other="etc." 

最後,如果真的是無法測試或合理的嘲笑(碰巧您的應用程序的部分,說你喊成第三方異常追蹤庫/服務,您無法在測試中加載),您可以指示coverage忽略那些用於計算覆蓋範圍的行,方法是在指令的末尾添加# pragma: no cover,您將不會完全測試:

my = "code" 
goes = "here" 

if debug: # pragma: no cover 
    call_untestable(code=True) 
    this_portion(ignored_for_coverage=True) 

covered_code = "yes, again!" 

更多,請參閱:

http://coverage.readthedocs.io/en/coverage-4.2/excluding.html

+0

真棒答案。謝謝! – Randy