这是我的问题结构,这个问题是MCVE。
A.py
def do_something():
print 'a i do something'
return 10
B.py
from wrx_test.use_mock.A import do_something
class B(object):
def b_do_something(self):
x = do_something()
print x
return x
use_mock.py
from mock import patch
from unittest import TestCase
from wrx_test.use_mock.B import B
class TestUseMock(TestCase):
@patch('wrx_test.use_mock.A.do_something')
def test_use_mock(self, mock_do_something):
from wrx_test.use_mock.A import do_something
mock_do_something.return_value = 4
print do_something()
B().b_do_something()
在use_mock.py中,我将模拟方法return_value设置为等于4,但它不能作为例外工作。如何使模拟方法A.do_something
在模块B中正常工作,我现在想知道原因。
结果
a i do something
10
答案 0 :(得分:0)
我认为mock的工作方式是在另一个调用中使用此函数时,在模块中指定一个函数替换为mock。示例:patch('A.do_something)意味着如果您测试一个内部调用A.do_something()的函数,它将在该调用中被替换。但是在这里你直接执行该功能。 我也没有看到任何有用的案例。如果要直接调用mock,请执行:mock_do_something()