PyCharm为Django测试目标提供了“Run with Coverage”操作。这将运行测试,但显示零测试覆盖率(0%文件,项目窗格中未涵盖,编辑器中全部为红色)。选中或取消选中“使用捆绑的coverage.py”没有任何区别。
从CLI运行相同的测试会得到预期的结果:
$ coverage --version
Coverage.py, version 3.5.1. http://nedbatchelder.com/code/coverage
$ coverage run ./manage.py test blackbox
Creating test database for alias 'default'...
....
----------------------------------------------------------------------
Ran 4 tests in 0.002s
OK
Destroying test database for alias 'default'...
$ coverage report
Name Stmts Miss Cover
---------------------------------------------
__init__ 0 0 100%
blackbox/__init__ 0 0 100%
blackbox/models 5 0 100%
blackbox/rules/__init__ 1 0 100%
blackbox/rules/board 62 19 69%
blackbox/tests 49 6 88%
manage 11 4 64%
settings 24 0 100%
---------------------------------------------
TOTAL 152 29 81%
是什么导致这种情况?
答案 0 :(得分:4)
如果您通过路径中的任何符号链接访问项目,则覆盖显示将失败。
尝试通过真实路径打开同一个项目,您将获得正确的行为。
https://youtrack.jetbrains.com/issue/PY-17616
PS:刷新旧问题,因为bug还没有修复。
答案 1 :(得分:2)
使用PyCharm捆绑的coverage.py
我遇到了类似的问题测试运行正常,但覆盖率结果未在任何地方加载,“0%”或“未涵盖”。
在PyCharm控制台中记录了一个错误,但是在测试结果之后,就是coverage.py相关:
/System/Library/Frameworks/Python.framework/Versions/2.6/bin/python
"/Applications/PyCharm 2.5 EAP.app/helpers/run_coverage.py"
run "--omit=/Applications/PyCharm 2.5 EAP.app/helpers" bin/test
Creating test database for alias 'default'...
................................
----------------------------------------------------------------------
Ran xx tests in xxs
OK
No source for code: '/path/file.py' (<- error)
Process finished with exit code 0
我的解决方案是运行捆绑的coverage.py并选择忽略错误:“ - i”。
我编辑了捆绑的“run_coverage.py”文件,您可以在控制台输出中看到它的位置,并在最后一行添加“-i”选项:
main(["xml", "-o", coverage_file + ".xml"])
为:
main(["xml", "-i", "-o", coverage_file + ".xml"])
这对我有用,错误被忽略,所有覆盖数据现在都加载到UI中。
如果使用“-i”解决了您的问题,更好的解决方案是修复错误,但在此之前,您将看到覆盖率结果。
答案 2 :(得分:1)
我也一直试图在Ubuntu中解决这个问题。
目前我尝试使用apt-get Python和Enthought Canopy堆栈,但没有成功。在Windows中,它确实有效(使用Canopy)。
我使用了以下代码:
# in a.py
class A(object):
def p(self, a):
return a
# in test_a.py
from unittest import TestCase, main
from a import A
class TestA(TestCase):
def test_p(self):
inst = A()
val = inst.p("a")
self.assertEqual("a", val)
if _name_ == "__main__":
main()
答案 3 :(得分:1)
我有类似的问题。我最终使用nosetests --cover-xml
生成xml数据,但您也可以使用coverage xml
然后可以从Analyze中轻松地在PyCharm / IDEA中加载该报告 - &gt;显示覆盖率数据... - &gt; +按钮并选择xml文件。