在python中模拟boto的set_contents_from_filename

时间:2014-08-12 05:26:03

标签: python unit-testing mocking python-unittest

我正在尝试为save_file_to_s3方法编写单元测试:

class S3Wrapper(object):

  def __init__(self, aws_key, aws_secret):
    self._s3_handle = S3Connection(aws_key, aws_secret)


  def save_file_to_s3(self, filename, bucket_name, key):

    bucket = self._s3_handle.get_bucket(bucket_name)
    k = Key(bucket)
    k.key = key 
    k.set_contents_from_filename(filename)

我如何使用mocktests做到这一点?

1 个答案:

答案 0 :(得分:2)

直接在类本身上修补方法。为方便起见,我通常会将这些常见的模拟转换为装饰器,例如:

import mock
from boto.s3.key import Key

def mock_s3_key(func):
    def _mock_s3_key(*args, **kwargs):
        with mock.patch.object(Key, 'set_contents_from_filename', return_value=None):
            return func(*args, **kwargs)
    return _mock_s3_key


class YourTest(TestCase):

    @mock_s3_key
    def test_save_file_to_s3(self):
        # test code here
        pass