假设我有以下代码:
class A
def __init__(self)
self.bucket = S3Connection().get_bucket()
def method(self)
key = self.bucket.new_key()
key.set_contents()
如何测试对
method
和new_key
的模拟调用set_content
?我开始以下方式 @patch('my_file.S3Connection')
test_method()
a = A()
最佳答案
Bruno的答案是一个很好的技巧,但是从您的评论中可以清楚地看到您正在使用旧版代码。
我不是boto
专家,但我想如果修补整个S3Connection
而不是仅修补其get_bucket()
方法,效果会更好。
现在,您必须修补S3Connection
工厂(构造函数),之后,模拟对象的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