Должен ли я издеваться над пользовательским классом, используя внешние библиотеки или сами методы внешних библиотек? - PullRequest
0 голосов
/ 18 октября 2019

Я хочу проверить get_list_of_objects(), как указано ниже. В этой функции есть self.bucket.objects.filter (), который я хотел бы высмеять, чтобы просто вернуть то, что я хочу. Я думаю, что это осложняется тем, что пользовательский класс S3 использует внешние библиотеки. Так что я не уверен, стоит ли мне пытаться смоделировать пользовательский класс или внешние библиотеки?

class S3:
    def __init__(self, bucket_name="bucket_name"):
        self.s3_resource = boto3.resource("s3")
        self.bucket = self.s3_resource.Bucket(bucket_name)
        self.s3_client = boto3.client("s3")

    def get_list_of_objects(self, key_prefix):
        key_list = []
        for object_summary in self.bucket.objects.filter(Prefix=key_prefix):
            key_list.append(object_summary.key)
        return key_list

Попытка 1: в этом случае я просто проверяю, есть ли пустой словарь, который я назначил для метода макетавозвращаемое значение преобразуется в список

import unittest
from unittest.mock import patch
from filepath.filename import S3

class TestS3Class(unittest.TestCase):
    """TestCase for storage/s3.py"""

    def setUp(self):
        """Creates an instance of the live S3 class for testing"""
        self.s3_instance = S3()

@patch('S3.self.bucket.object.filter')
    def test_get_list_of_objects(self, mock_objects_filter):
        mock_objects_filter.return_value = {}
        self.assertIsInstance(self.s3_instance.get_list_of_objects(key_prefix='key'), list)

, что приводит к ошибке: ModuleNotFoundError: No module named 'S3'

...