鼻子测试包的组成是什么?
What constitutes a package for nosetests?
我写了一个 "package" -- 我的意思是其中有一个 __init__.py
的目录 -- 名为 ardid
:
(master)dbliss@nx3[ardid]> ls
analysis.py ardid.sh __init__.pyc plot_support.py utils.py
analysis.pyc goals.py k_12.png plot_support.pyc utils.pyc
ardid.py goals.pyc plot_ardid.py results/
ardid.pyc __init__.py plot_ardid.pyc tests/
如您所见,该软件包包含以下模块
analysis
ardid
goals
plot_ardid
plot_support
utils
以及目录 tests
.
中的测试模块
(__init__.py
为空。)
然而,当我 运行 nosetests
和 --cover-package=ardid
时,输出显示只覆盖了 ardid
的几个模块(特别是 ardid
, goals
, 和 utils
):
(master)dbliss@nx3[ardid]> nosetests tests -s --cover-package=ardid --with-coverage
...............
Name Stmts Miss Cover Missing
----------------------------------------------
ardid.py 0 0 100%
ardid/ardid.py 108 54 50% 105-254
ardid/goals.py 42 38 10% 52-87, 102-161
ardid/utils.py 437 366 16% 23-26, 30-71, 78, 83-89, 108-110, 113-140, 142-146, 165-166, 168-183, 186-218, 223-285, 288-324, 344, 357-427, 438-441, 443-444, 446-468, 475-480, 483-496, 499, 508-509, 512-513, 516-524, 532, 545-548, 559, 571, 575-576, 581-582, 594-605, 614-615, 618-1018
----------------------------------------------
TOTAL 587 458 22%
----------------------------------------------------------------------
Ran 15 tests in 11.454s
OK
这是为什么?
请注意,这些并不是我测试的唯一模块:
(master)dbliss@nx3[ardid]> ls tests/
test_plot_support.py test_plot_support.pyc test_utils.py test_utils.pyc
正确的是 ardid
模块导入了 goals
和 utils
,但没有导入其他模块。这是导致 nosetests
仅检测到 goals
和 utils
(除了 ardid
)的原因吗?为什么会这样?
我认为答案可能与我在测试模块中导入包模块的方式有关。因为 ardid
模块与包同名,所以我必须用
导入它
from ardid import ardid
(如果我简单地调用
import ardid
包将被导入。)
我导入的其他模块,例如
import utils
nosetests
考虑从 ardid
导入的包 ardid
模块的一部分(来自 ardid
包,而不是模块)。
因此,一个简单的解决方案是将测试模块中的导入更改为
from ardid import X
其中 X
是要测试的模块之一。
@jonrsharpe 在评论中提供了另一个解决方案,如果这个包打算供我以外的任何人使用(并且包含我的解决方案),则该解决方案会更合适。
我写了一个 "package" -- 我的意思是其中有一个 __init__.py
的目录 -- 名为 ardid
:
(master)dbliss@nx3[ardid]> ls
analysis.py ardid.sh __init__.pyc plot_support.py utils.py
analysis.pyc goals.py k_12.png plot_support.pyc utils.pyc
ardid.py goals.pyc plot_ardid.py results/
ardid.pyc __init__.py plot_ardid.pyc tests/
如您所见,该软件包包含以下模块
analysis
ardid
goals
plot_ardid
plot_support
utils
以及目录 tests
.
(__init__.py
为空。)
然而,当我 运行 nosetests
和 --cover-package=ardid
时,输出显示只覆盖了 ardid
的几个模块(特别是 ardid
, goals
, 和 utils
):
(master)dbliss@nx3[ardid]> nosetests tests -s --cover-package=ardid --with-coverage
...............
Name Stmts Miss Cover Missing
----------------------------------------------
ardid.py 0 0 100%
ardid/ardid.py 108 54 50% 105-254
ardid/goals.py 42 38 10% 52-87, 102-161
ardid/utils.py 437 366 16% 23-26, 30-71, 78, 83-89, 108-110, 113-140, 142-146, 165-166, 168-183, 186-218, 223-285, 288-324, 344, 357-427, 438-441, 443-444, 446-468, 475-480, 483-496, 499, 508-509, 512-513, 516-524, 532, 545-548, 559, 571, 575-576, 581-582, 594-605, 614-615, 618-1018
----------------------------------------------
TOTAL 587 458 22%
----------------------------------------------------------------------
Ran 15 tests in 11.454s
OK
这是为什么?
请注意,这些并不是我测试的唯一模块:
(master)dbliss@nx3[ardid]> ls tests/
test_plot_support.py test_plot_support.pyc test_utils.py test_utils.pyc
正确的是 ardid
模块导入了 goals
和 utils
,但没有导入其他模块。这是导致 nosetests
仅检测到 goals
和 utils
(除了 ardid
)的原因吗?为什么会这样?
我认为答案可能与我在测试模块中导入包模块的方式有关。因为 ardid
模块与包同名,所以我必须用
from ardid import ardid
(如果我简单地调用
import ardid
包将被导入。)
我导入的其他模块,例如
import utils
nosetests
考虑从 ardid
导入的包 ardid
模块的一部分(来自 ardid
包,而不是模块)。
因此,一个简单的解决方案是将测试模块中的导入更改为
from ardid import X
其中 X
是要测试的模块之一。
@jonrsharpe 在评论中提供了另一个解决方案,如果这个包打算供我以外的任何人使用(并且包含我的解决方案),则该解决方案会更合适。