运行 coverage.py 模拟单元测试
Running coverage.py over unit tests with mocking
我正在尝试 运行 代码覆盖我程序的单元测试。我在测试中使用模拟,这意味着我必须使用 python3 及更高版本。我已经使用 pip:
安装了 coverage.py
pip install coverage
安装成功,覆盖范围正常。问题是,当我尝试 运行 覆盖我的单元测试时,它 运行s 与 python2.6 并且导入模拟失败,尽管我的脚本以 #![=27 开头=]:
coverage run ./my_tests.py
回溯(最近调用最后):
文件“./my_tests.py”,第 9 行,在模块
中
来自 unittest.mock 导入补丁
ImportError: 没有名为 mock
的模块
有没有办法将 运行 的覆盖范围配置为 python3?是否有默认情况下适用于 python3 的 coverage 版本?
您的默认设置显然是 2.6 python。或者至少,您在 2.6 树中安装了 coveragepy 模块,它将 'coverage' 放入 python26/Scripts,然后 运行s coveragepy 与 2.6。但是,如果您显式 运行 模块与 2.x 和 3.x 一起使用,而不仅仅是默认值,则该模块可与 2.x 和 3.x 一起使用。
我通过将它克隆到我的 dev
目录中而恰好拥有 'installed' coveragepy。我还为我的特殊需要写了一个 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_Lib_idlelib_%1.html
rem Above opens new report; htmlcov\index.html displays report index
我正在尝试 运行 代码覆盖我程序的单元测试。我在测试中使用模拟,这意味着我必须使用 python3 及更高版本。我已经使用 pip:
安装了 coverage.pypip install coverage
安装成功,覆盖范围正常。问题是,当我尝试 运行 覆盖我的单元测试时,它 运行s 与 python2.6 并且导入模拟失败,尽管我的脚本以 #![=27 开头=]:
coverage run ./my_tests.py
回溯(最近调用最后):
文件“./my_tests.py”,第 9 行,在模块
中
来自 unittest.mock 导入补丁
ImportError: 没有名为 mock
有没有办法将 运行 的覆盖范围配置为 python3?是否有默认情况下适用于 python3 的 coverage 版本?
您的默认设置显然是 2.6 python。或者至少,您在 2.6 树中安装了 coveragepy 模块,它将 'coverage' 放入 python26/Scripts,然后 运行s coveragepy 与 2.6。但是,如果您显式 运行 模块与 2.x 和 3.x 一起使用,而不仅仅是默认值,则该模块可与 2.x 和 3.x 一起使用。
我通过将它克隆到我的 dev
目录中而恰好拥有 'installed' coveragepy。我还为我的特殊需要写了一个 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_Lib_idlelib_%1.html
rem Above opens new report; htmlcov\index.html displays report index