如何在没有Mock的情况下存根Python方法 [英] How to stub Python methods without Mock

查看:86
本文介绍了如何在没有Mock的情况下存根Python方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一位从事Python方面工作的C#开发人员,所以我不知道自己现在在做什么.我读过您真的不需要使用Python进行依赖注入.有人告诉我可以实例化代码中的对象,并让它们按您想要的方式运行,但是,您可以将这些对象上的方法指向测试中定义的我自己的存根-可能没有模拟对象.

I'm a C# dev moving into some Python stuff, so I don't know what I'm doing just yet. I've read that you don't really need Dependency Injection with Python. I've been told you can instantiate objects in your code and have them run the way you want, however, you can point methods on those objects to my own stubs defined in my tests - supposedly without mocks.

这是真的吗?我试图做到这一点,但不能完全正常工作.实际如何完成?如何在没有模拟库的情况下在Python中存根方法?

Is this true? I've tried to do it and can't quite get it working. How is this actually done? How do I stub a method in Python without a mocking library?

推荐答案

这是一个基本示例.请注意,从未调用生产getData()方法.它已经被存根模拟了.

Here's a basic example. Note that the production getData() method is never called. It has been mocked out with a stub.

import unittest
class ClassIWantToTest(object):

    def getData(self):
        print "PRODUCTION getData called"
        return "Production code that gets data from server or data file"

    def getDataLength(self):
        return len(self.getData())

class TestClassIWantToTest(unittest.TestCase):

    def testGetDataLength(self):
        def mockGetData(self):
            print "MOCK getData called"
            return "1234"

        origGetData = ClassIWantToTest.getData
        try:
            ClassIWantToTest.getData = mockGetData
            myObj = ClassIWantToTest()
            self.assertEqual(4, myObj.getDataLength())
        finally:
            ClassIWantToTest.getData = origGetData

if __name__ == "__main__":
    unittest.main()

这篇关于如何在没有Mock的情况下存根Python方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆