2015-11-14 30 views
0

我使用下面的命令來運行測試:代碼的覆蓋率動態導入包/模塊

nosetests --with-coverage --cover-html --cover-package mypackage 

我想覆蓋報告進行更新,即使開發者增加了新的,未經測試 ,編碼到包。

例如,假設開發人員在軟件包中添加了一個新模塊,但忘記爲其編寫測試。由於測試可能不會導入新模塊,因此代碼覆蓋可能不會反映未發現的代碼。顯然這是在代碼審查階段可以防止的事情,但更早趕上它會很棒。

我的解決方案是編寫一個簡單的測試,動態地導入頂層包下的所有模塊。我用下面的代碼片段來做到這一點:

import os 
import pkgutil 

for loader, name, is_pkg in pkgutil.walk_packages([pkg_dirname]): 
    mod = loader.find_module(name).load_module(name) 

動態導入子包和子模塊像這樣沒有得到通過鼻子的代碼覆蓋率插件回升。

任何人都可以提出一個更好的方式來實現這種類型的東西?

回答

0

該問題似乎是動態導入頂層包下的所有包/模塊的方法。

使用定義的方法here似乎工作。關鍵的區別是使用importlib而不是pkgutil。然而,importlib是在Python 2.7和3.1中引入的,所以這個解決方案不適用於老版本的python。

我已更新原始代碼段以使用__import__而不是ImpLoader.load_module方法。這似乎也有竅門。

import os 
import pkgutil 

for loader, name, is_pkg in pkgutil.walk_packages([pkg_dirname]): 
    mod = loader.find_module(name) 
    __import__(mod.fullname)