Python 我们可以将一个函数和mocker传递给另一个函数进行mock吗?
我想将函数表单和mocker一起传递给测试类中的另一个函数,并期望该函数在返回后被模拟。但是,它似乎不起作用,谢谢你的建议Python 我们可以将一个函数和mocker传递给另一个函数进行mock吗?,python,Python,我想将函数表单和mocker一起传递给测试类中的另一个函数,并期望该函数在返回后被模拟。但是,它似乎不起作用,谢谢你的建议 class Cls(): def submthd(self): return 0 def mthd(self): a=self.submthd() return a class Test_me(MockerTestCase): def setUp(self): pass def mockup(sel
class Cls():
def submthd(self):
return 0
def mthd(self):
a=self.submthd()
return a
class Test_me(MockerTestCase):
def setUp(self):
pass
def mockup(self,f,m):
f = m.mock()
f(ARGS)
m.result(1)
m.replay()
def test_null(self):
m=Mocker()
o=Cls()
self.mockup(o.submthd,m)
self.assertEqual(o.mthd(),1)
m.verify()
我可能弄错了,但在我看来,您试图做的是用Python Mocker的说法来命名的。您希望更改现有Cls实例上submthd调用的行为 首先,您需要使用对象的子类。让我们重新定义Cls: 我已经添加了submthd2和mthd2来展示如何使用您的模型。。。方法,但在其他方面,您的类基本上是不变的 现在,为了在测试用例中使用补丁,您可以执行以下操作:
class Test_me(MockerTestCase):
def mockup(self, p, f, m):
methodToCall = getattr(p, f)
methodToCall()
m.result(1)
def test_null(self):
m = Mocker()
o = Cls()
p = m.patch(o)
self.mockup(p, 'submthd', m)
self.mockup(p, 'submthd2', m)
m.replay()
self.assertEqual(o.mthd(), 1)
self.assertEqual(o.mthd2(), 1)
m.verify()
当我将此代码作为单元测试运行时,我得到:
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK
它确实有效,但我不允许更改源代码,所以我是否可以绕过这个问题,而不使其成为object的子类?请参阅我的答案,我将处理您正在测试的类不是object的子类的情况。
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK