-2
J'ai la fonction suivante pour laquelle je voudrais écrire des tests.Test de l'unité Python pour le code contenant la déclaration
def _find_latest_backup(self):
"""
Find the latest backup in S3 bucket
"""
aem_instance_type = self.instance_of
if aem_instance_type == 'standby':
aem_instance_type = 'author'
with S3Bucket(name=self.s3_bucket) as bucket:
objects = bucket.objects.filter(
Prefix=self.s3_folder + "/aem_" + aem_instance_type,
)
print objects
try:
return max(objects, key=attrgetter('last_modified')).Object()
except ValueError:
self.logger.info("No backups found in %s/aem_%s", self.s3_folder, aem_instance_type)
Mon unittest ressemble à ceci,
@pytest.mark.parametrize('s3_obj_summaries,latest_key', [
(
[
MockS3ObjectSummary(
key='aem-cpp-dev-01/backup1',
last_modified=datetime(2017, 1, 10, 15, 0)
),
MockS3ObjectSummary(
key='aem-cpp-dev-01/backup2',
last_modified=datetime(2017, 2, 11, 15, 0)
),
MockS3ObjectSummary(
key='aem-cpp-dev-01/backup3',
last_modified=datetime(2017, 3, 12, 15, 0)
),
MockS3ObjectSummary(
key='aem-cpp-dev-01/backup4',
last_modified=datetime(2017, 4, 12, 15, 0)
),
],
"aem-cpp-dev-01/backup4"
),
])
def test_find_latest_backup(self, mocker, s3_obj_summaries, latest_key):
""" Test getting the latest backup file """
bucket = mocker.patch('aem_management.restore.S3Bucket')
bucket.__enter__.objects.filter.return_value = True
restore_manager = blank_restore_manager()
assert restore_manager._find_latest_backup().key == latest_key
Cependant je ne suis pas la valeur correcte return_value. Sortie je vois est
with mocker.patch('aem_management.restore.S3Bucket', return_value=mock_bucket) as bucket:
restore_manager = blank_restore_manager()
> assert restore_manager._find_latest_backup().key == latest_key
E AttributeError: 'NoneType' object has no attribute 'key'
C'est la première fois que je suis à écrire des tests pour le code contenant avec déclaration et dois-je faire quelque chose de différent pour faire ce travail?
Un grand merci,