1

我有两个 python 文件:

函数.py:

def foo ():
    return 20

def func ():
    temp = foo()
    return temp

和嘲笑.py:

 from testing.function import *
 import unittest
 import mock
 class Testing(unittest.TestCase):

 def test_myTest(self):

     with mock.patch('function.func') as FuncMock:
         FuncMock.return_value = 'string'

         self.assertEqual('string', func())

我想模拟 func,但没有积极的结果。我有 AssertionError: 'string' != 20。我应该怎么做才能正确模拟它?如果我做 mock.patch ('func') 我有 TypeError: Need a valid target to patch。你提供了:'func'。如果我将 func 移动到 mocking.py 并调用 foo: function.foo() 它可以正常工作。但是当我不想将函数从 function.py 移动到 mocking.py 时怎么办?

4

1 回答 1

2

当您调用实际函数但您希望在该函数中模拟一些函数调用时,模拟很有用。在您的情况下,您的目标是模拟func并且您希望通过 do 直接调用该模拟函数func()

但是,这不起作用,因为您正在模拟function.func,但您已经导入func到您的测试文件中。所以func()你调用的是一个实际的函数,它与 mocked 不同FuncMock。尝试调用FuncMock(),你会得到预期的结果。

以下应该有效,它让您了解可以做什么:

from testing.function import func
import unittest
import mock

class Testing(unittest.TestCase):

    def test_myTest(self):

        with mock.patch('testing.function.foo') as FooMock:
            FooMock.return_value = 'string'

            self.assertEqual('string', func())
于 2014-12-04T20:23:35.523 回答