[英]how mock only one method called within the object you are testing
我想测试一个方法,但模拟出它调用的其他方法。 我创建了这个简单的例子来说明这个概念:
class myClass():
def one_method(self):
print "hey"
def two_deep(self):
self.one_method()
def three_deep(self):
self.two_deep()
我正在使用一个名为Mox的python模拟框架,并编写了以下代码来做到这一点:
def test_partial(self):
self_mox = mox.Mox()
some_object = myClass()
## 1. make your mock
my_mock = mox.MockObject(some_object)
my_mock.one_method().AndReturn('some_value')
self_mox.ReplayAll()
ret = my_mock.three_deep() ## *** SEE NOTE BELOW called "comment":
self_mox.VerifyAll()
评论:
我以为,如果我在尚未被覆盖的方法上调用此模拟,那么该模拟将默认为原始代码,那么我可以获得所需的调用链,而最后一个调用被替换了……但是它不会这样做。 我不知道如何将模拟对象嵌入没有插入方法的测试对象中。
我研究了Partial Mocks和Chained Mocks来解决这个问题,但是我找不到办法。
谢谢你的帮助 :)
-彼得
检查StubOutWithMock的文档: https : //code.google.com/p/pymox/wiki/MoxDocumentation#Stub_Out https://code.google.com/p/pymox/wiki/MoxRecipes#Mock_a_method_in_the_class_under_test。
因此,您需要的是:
def test_partial(self):
self_mox = mox.Mox()
# Create the class as is, instead of doing mock.
some_object = myClass()
# Stub your particular method using the StubOutWithMock.
m.StubOutWithMock(some_object, "one_method")
some_object.one_method().AndReturn('some_value')
self_mox.ReplayAll()
ret = some_object.three_deep()
self_mox.UnsetStubs()
self_mox.VerifyAll()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.