模拟已经实例化的python类的函数

时间:2017-07-17 06:41:42

标签: python mocking

我有一个班级的实例。

MyClass.py:

class MyClass:
    def f1(self):
        print 'f1'
        self.f2()

    def f2(self):
        print 'f2'

myInstance = MyClass()

如果我致电myInstance.f1(),我会:

f1
f2

在我的测试课程中,我想更改f2()的行为,而不是创建myInstance的新实例或触摸f1()。所以我想在我的测试类中设置f2(),这样当我运行时:

TestMyClass.py:

from MyClass import myInstance

# I don't know what goes here...
def f2(self):
    print 'mock_f2'

myInstance.f1()

打印:

f1
mock_f2

我该怎么做?我在网上看到的所有说明都要求我创建一个MyClass的新实例并为此做点什么。

1 个答案:

答案 0 :(得分:0)

在python中,您可以设置类似属性的方法。

def f2():
    print "mock f2"
class A(object):
    def f1(self):
        print "f1"
        self.f2()

    def f2(self):
        print "f2"
a = A()
# prints
# f1
# f2
a.f1()
a.f2 = f2
# prints
# f1
# mock f2
a.f1()

这样做会将方法设置在对象级别,这意味着如果您实例化另一个对象,它将不会受到影响。

b = A()
# prints
# f1
# f2    
b.f1()