python - 如何模拟在同一文件中定义且未由正在测试的方法导入的函数?
问题描述
到目前为止,我有以下代码:
import unittest
from mock import patch, Mock
def method_1():
from math import ceil
return ceil(1.2)
def test_1():
m = Mock(return_value=10)
with patch('math.ceil', m) as p:
a = method_1()
assert(a == 10)
def method_2():
return method_1() + 1
def test_2():
m = Mock(return_value=20)
with patch('method_1', m) as p:
a = method_2()
assert(a == 21)
在运行测试时,我收到以下错误:
$ nosetests -s unittest.py
.E
======================================================================
ERROR: unittest.test_2
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/srv/www/rpr/unittest.py", line 27, in test_2
with patch('method_1', m) as p:
File "/usr/local/lib/python2.7/dist-packages/mock.py", line 1564, in patch
getter, attribute = _get_target(target)
File "/usr/local/lib/python2.7/dist-packages/mock.py", line 1413, in _get_target
(target,))
TypeError: Need a valid target to patch. You supplied: 'method_1'
----------------------------------------------------------------------
Ran 2 tests in 27.840s
FAILED (errors=1)
我能够math.ceil
正确模拟并test_1
通过,没有任何问题。我很难自嘲method_1
。我该怎么做呢?
解决方案
我必须更改test_2
为以下内容才能使其正常工作:
def test_2():
m = Mock(return_value=20)
with patch(__name__ + '.method_1', m) as p:
a = method_2()
assert(a == 21)
推荐阅读
- ios - 未调用 preferredScreenEdgesDeferringSystemGestures
- node.js - SSL 安全连接是否可以在没有浏览器调用的情况下使用?
- php - TYPO3:Extbase 模型中的性能
- python - 将替换字符串 lambda 应用于 python 中的所有行
- javascript - u"'' 值的日期格式无效。它必须是 YYYY-MM-DD 格式我需要它是 MM-DD-YYYY
- r - 使用 Phoenix 将 R 连接到 Hadoop 的问题
- shell - 如何将 Jenkins 凭据传递给 Dockerfile/Shell?
- uwp - 我无法在 codedui 中选择 UWP ListView 项目
- arrays - 在 PostgreSQL 中:如何将包含 FK 的数组字段转换为引用表中的名称数组?
- r - 基于R中的数据密度着色