1

我正在使用以下命令运行测试:

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)

像这样动态导入子包和子模块不会被nose中的代码覆盖插件拾取。

任何人都可以提出更好的方法来实现这种类型的事情吗?

4

1 回答 1

0

问题似乎是在顶级包下动态导入所有包/模块的方法。

使用此处定义的方法似乎可行。主要区别在于使用 ofimportlib而不是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)
于 2015-11-14T11:33:19.100 回答