我想将函数表单和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(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()
答案 0 :(得分:0)
我可能会弄错,但在我看来,您尝试做的事情在Python Mocker的说法中称为"Patching"。您想要更改现有submthd()
实例上Cls()
调用的行为。
首先,您需要使用new style classes(例如object
的子类)。所以让我们重新定义Cls()
:
class Cls(object):
def submthd(self):
return 0
def mthd(self):
return self.submthd()
def submthd2(self):
return 0
def mthd2(self):
return self.submthd()
我添加了submthd2
和mthd2
,以说明如何在多种方法中使用mockup(...)
方法,但您的类基本上没有变化。
现在,为了在测试用例中使用修补程序,您可以执行以下操作:
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