首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模拟另一个文件中的函数和另一个其他文件中的类

模拟另一个文件中的函数和另一个其他文件中的类
EN

Stack Overflow用户
提问于 2015-11-10 07:01:34
回答 2查看 3.6K关注 0票数 1

我注意到类方法被正确地模拟出来了,但是函数绕过了模拟并运行了实际的函数。

代码语言:javascript
运行
复制
from module1 import myClass
from module2 import my_function
import unittest
from mock import patch

class TestStuff(unittest.TestCase):
    @patch('module2.my_function')
    @patch('module1.myClass.my_method')
    def test_my_function(self, mock_method, mock_function):
        test_obj = myClass()
        test_obj.my_method()
        assert mock_method.called
        my_function()
        assert mock_function.called

如果我打印出my_function()和类型(My_function),它将不会显示模拟函数,而是显示真正的函数。我导入一个类,然后模拟一个方法,但是我直接导入函数,这有关系吗?

EN

回答 2

Stack Overflow用户

发布于 2015-11-10 09:23:02

我想我发现了问题所在:当我测试一个函数时,如果我想模拟一些东西,我就不应该导入它。导入它会导致使用它,即使我已经放置了补丁装饰器。我认为这是对mocking/ this如何工作的普遍困惑。我想要做的是在不实际查询数据库的情况下测试函数。而不是模拟整个函数,我可以选择实际命中db的代码行- query.all() -并使其成为自己的函数,然后模拟出来。

代码语言:javascript
运行
复制
from module1 import myClass
from module2 import my_function

import unittest
from mock import patch

class TestStuff(unittest.TestCase):
    @patch('module2.db_query')
    @patch('module1.myClass.my_method')
    def test_my_function(self, mock_method, mock_db_query):
        test_obj = myClass()
        test_obj.my_method()
        assert mock_method.called
        my_function()  # my_function calls db_query(), now mocked out
        assert mock_db_query.called

如果我真的想模拟出所有的my_function,我可以不导入它。至少我现在是这么理解的。

票数 2
EN

Stack Overflow用户

发布于 2015-11-10 08:09:24

我遇到了类似的问题。原来我需要给它提供my_function的完整路径:

@patch('home.myuser.myprojects.mymodule.myfunc')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33619976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档