I have the following code so far:
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)
on running the tests I get the following error:
$ 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)
I am able to mock math.ceil
correctly and test_1
passes without any issues. I am having a hard time mocking method_1
itself. How do I do this?
I had to change test_2
to the following to get it to work right:
def test_2():
m = Mock(return_value=20)
with patch(__name__ + '.method_1', m) as p:
a = method_2()
assert(a == 21)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.