Проблема в издевательском python модульном тесте - PullRequest
1 голос
/ 07 марта 2020

Я написал тест, как показано ниже:

class TestLoader(TestCase):

@pytest.fixture(autouse=True)
@patch('loaders.myloader.DSFactory')
def _initialize_(self, mock_ds_factory):
    self.loader = MyLoader()
    mock_ds = Mock()
    mock_ds_factory.get_ds_for_env.return_value = mock_ds
    self.loader.ds = mock_ds

def test_load(self):

    self.loader.ds.read_file.return_value = json.dumps(self.get_data())

    self.loader.load("test_s3_key") #####IN THIS LINE I AM GETTING ERROR AS MENTIONED BELOW##

@staticmethod
def get_data():
    return {"key1":"value1","key2":"value2"}

Связанный источник находится здесь: loaders-> myloader.py. myloader.py выглядит следующим образом:

from common.ds_factory import DSFactory

class MyLoader:

   def __init__(self):

       self.ds = DSFactory.get_ds_for_env()


   def load(self, file_key):
       print(f"ds : {self.ds}")
       print(f"file read is : {self.ds.read_file(S3_BUCKET, file_key)}"}
       data_dict = json.loads(self.ds.read_file(S3_BUCKET, file_key))

Но во время тестирования я получаю сообщение об ошибке следующим образом:

ds is :<MagicMock name='DSFactory.get_ds_for_env()' id='140634163567528'>
file read is :<MagicMock name='DSFactory.get_ds_for_env().read_file()' id='140635257259568'>

E               TypeError: the JSON object must be str, bytes or bytearray, not 'MagicMock'

Я не понимаю, почему даже после поддельного возвращаемого значения файла read_file с

self.loader.ds.read_file.return_value = json.dumps(self.get_data())

Я получаю MagickMock объект. Я застрял, не понимаю, как решить эту проблему.

1 Ответ

1 голос
/ 07 марта 2020

Ваш код: из файла common.ds_factory import DSFactory

class MyLoader:
   def __init__(self):
       self.ds = DSFactory.get_ds_for_env()
   def load(self, file_key):
       data_dict = json.loads(self.datastore.read_file(S3_BUCKET, file_key))
  1. Проблема, которую я вижу, в том, что хранилище данных отсутствует, это должен быть self.ds.read_file
  2. Пожалуйста, напечатайте self.datastore.read_file (S3_BUCKET, file_key) и проверьте вывод.
  3. Это ошибка, поступающая из структуры AWS_S3 bucket Json. Кажется, он не отправляет значение Json в формате строки, а не в формате Magi c Mock.

Чтобы узнать больше о формате Magi c Mock, посетите здесь: https://medium.com/ryans-dev-notes/python-mock-and-magicmock-b3295c2cc7eb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...