【问题标题】:Python magic mock not setting the mocked valuePython魔术模拟未设置模拟值
【发布时间】:2017-10-08 08:45:03
【问题描述】:

我是第一次编写 python 测试。我正在尝试测试一个基本的模拟。我想在调用函数时返回一些我想要的值,而不是一个模拟对象。

代码如下: 在视图中:

def myfunction():
    return "Actual data"

测试中:

class TestBasic(unittest.TestCase):
    @patch('trailblazer.views.myfunction')
    def testMyFunction(self, val):
        print(val)
        val.return_value = "Test value"
        print(val)
        op = myfunction()
        print(op)

输出:

<MagicMock name='myfunction' id='4520521120'>
<MagicMock name='myfunction' id='4520521120'>
Actual data
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

PS:我的类中没有我的方法,我不想改变它。

【问题讨论】:

    标签: python unit-testing mocking magicmock


    【解决方案1】:

    您在测试模块中有对myfunction() 的直接引用,并且该引用 永远不会被修补。您只修补了 trailblazer.views 模块中的引用。

    如果您使用该引用而不是 myfunction,您的测试将起作用:

    from trailblazer import views
    
    class TestBasic(unittest.TestCase):
        @patch('trailblazer.views.myfunction')
        def testMyFunction(self, val):
            print(val)
            val.return_value = "Test value"
            print(val)
            op = views.myfunction()
            print(op)
    

    不过,更有意义的测试是测试使用myfunction()的代码。您可以使用模拟来关注特定代码单元的行为,其中模拟可以让您精确控制与其他单元的交互。

    换句话说,如果你有这样的代码:

    def some_function_to_test():
        # other things
        result = myfunction()
        # more things working on result
        return final_result
    

    然后在测试some_function_to_test()时修补myfunction()是有意义的。

    我建议您阅读 Python 名称的工作原理;我强烈推荐Facts and myths about Python names and values,以及unittest.mock 文档中的Where to patch

    【讨论】:

    • 我相信这个问题,即使过于简化,也可以帮助像我这样最初不理解实际使用的功能而不是正在使用的功能的其他人进口的。此外,由于存在有效答案的余地,这个问题对我来说似乎是有效的。因此,否决这个问题的意义不再很清楚。如果您能告诉我我能做些什么来改善这个问题,我将不胜感激。谢谢!
    • @sinshil:对不起,我无法读心。否决按钮上有一个工具提示,这可能是一个原因,我能给你的唯一建议是彻底阅读 How to Ask 并尝试应用这些建议。
    • 对不起。我只是想了解,对这个不熟悉。
    猜你喜欢
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2011-09-11
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多