Python unittest模拟方法,在另一个模块中调用工作错误

时间:2017-08-11 03:13:01

标签: python unit-testing mocking

这是我的问题结构,这个问题是MCVE。

  • wrx_test
    • use_mock
    • 初始化的.py
    • A.py
    • B.py
    • use_mock.py

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 

1 个答案:

答案 0 :(得分:0)

我认为mock的工作方式是在另一个调用中使用此函数时,在模块中指定一个函数替换为mock。示例:patch('A.do_something)意味着如果您测试一个内部调用A.do_something()的函数,它将在该调用中被替换。但是在这里你直接执行该功能。 我也没有看到任何有用的案例。如果要直接调用mock,请执行:mock_do_something()