Python 如何模拟在同一文件中定义的函数,而不是由被测试的方法导入的函数?
到目前为止,我有以下代码:Python 如何模拟在同一文件中定义的函数,而不是由被测试的方法导入的函数?,python,python-2.7,unit-testing,Python,Python 2.7,Unit Testing,到目前为止,我有以下代码: 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 ==
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
顺利通过。我很难模仿方法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)