我使用以下命令运行测试:
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中的代码覆盖率插件拾取。
有人能建议更好的方法来实现这类事吗?
答案 0 :(得分:0)
问题似乎是在顶级包下动态导入所有包/模块的方法。
使用定义的方法here似乎有效。关键区别在于使用...
ageChart.AddSeries(
chartType: "column",
xValue: data.Select(person => person.Age),
yValues: data.Select(person => person.Date));
而不是importlib
。但是,pkgutil
是在python 2.7和3.1中引入的,所以这个解决方案不适合旧版本的python。
我已将原始代码段更新为使用importlib
而非__import__
方法。这似乎也可以解决问题。
ImpLoader.load_module