我试图在程序的单元测试中运行代码覆盖率。我在测试中使用模拟,这意味着我必须使用python3和up。我使用pip安装了coverage.py:
pip install coverage安装工作正常,覆盖范围提前开始工作。问题是,当我试图在单元测试上运行覆盖率时,它使用python2.6运行,并在导入模拟上失败,尽管我的脚本以#!/usr/bin/python3 3开头:
coverage run ./my_tests.py跟踪(最近一次调用):
文件"./my_tests.py",第9行,模块
从unittest.mock导入修补程序
ImportError:没有名为的模块
是否有一种方法可以将覆盖率配置为与python3一起运行?在默认情况下,是否有适用于python3的覆盖率版本?
发布于 2015-03-07 20:34:32
很明显,您的默认python有2.6。或者至少,您在2.6树中安装了复盖模块,它将“覆盖率”放在python26 26/Script中,然后使用2.6运行复盖。但是,如果您显式地运行2.x和3.x,而不仅仅是默认的,那么该模块可以同时使用其中的一个。
我碰巧在我的dev目录中克隆了它,从而“安装”了它。我还为我的特殊需要编写了一个cover.bat,它是在我的python存储库克隆中测试新的和修补好的idlelib文件,然后再提交它们。这是我的档案。与您的问题特别相关的是以%py%开头的行。我将其设置为3.4的存储库构建,但您也可以轻松地将其指向已安装的3.4,甚至可以将其作为输入。
@echo off
rem Usage: cover fileName [test_ suffix] # proper case required by coveragepy
rem filename without .py, 2nd parameter if test is not test_filename
setlocal
set py=34\pcbuild\python_d
set src=idlelib.%1
if "%2" EQU "" set tst=34/Lib/idlelib/idle_test/test_%1.py
if "%2" NEQ "" set tst=34/Lib/idlelib/idle_test/test_%2.py
%py% coveragepy run --pylib --source=%src% %tst%
%py% coveragepy report --show-missing
%py% coveragepy html
htmlcov\34_Lib_idlelib_%1.html
rem Above opens new report; htmlcov\index.html displays report indexhttps://stackoverflow.com/questions/28914694
复制相似问题