假设我有以下代码:
class A
def __init__(self)
self.bucket = S3Connection().get_bucket()
def method(self)
key = self.bucket.new_key()
key.set_contents()
如何测试对 new_key
和 set_content
的模拟调用的方法
?我开始采用以下方式
@patch('my_file.S3Connection')
test_method()
a = A()
最佳答案
布鲁诺的回答是一个很好的提示,但从您的评论中可以清楚地看出您正在使用旧代码。
我不是 boto
专家,但我想如果您修补整个 S3Connection
而不是仅修补其 get_bucket()
方法,效果会更好。
现在您必须修补 S3Connection
factory (构造函数),之后您的模拟的 return_value
将成为我们要求的对象get_bucket()
.
你的测试变成:
@patch('my_file.S3Connection')
test_method(mock_s3connection)
mock_bucket = mock_s3connection.return_value.get_bucket
a = A()
#Just for fun ... check if the patch works like expected
assert a.bucket is mock_bucket
a.method()
#check method logic
assert mock_bucket.new_key.set_contents.called
关于python - 在以下情况下如何模拟方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29489932/