python unittest setup,Moto不能与python unit test setUp()调用一起工作

在Python单元测试中,使用Moto库模拟S3交互时,当依赖setUp()方法创建和填充bucket时,测试失败并抛出NoSuchBucket错误。然而,当在每个测试方法内部重复初始化S3 bucket和对象时,测试能正常运行。这表明setUp()可能没有正确地在测试间保持bucket的状态。
摘要由CSDN通过智能技术生成

我正在使用moto和Python 3.7模拟一些S3交互。如果测试方法中包含所有模拟代码,则moto似乎工作正常。当我把一些初步代码移到

setUp()

设置()

import unittest

import boto3

from moto import mock_s3

class BucketFacadeTests(unittest.TestCase):

@mock_s3

def setUp(self):

print('setUp called')

s3 = boto3.resource('s3', region_name='us-east-1')

s3.create_bucket(Bucket='bucket')

key = 'a/b/c/d.txt'

object = s3.Object('bucket', key)

object.put(Body='my dog has fleas')

def do_test(self):

s3 = boto3.resource('s3', region_name='us-east-1')

the_object = s3.Object('bucket', 'a/b/c/d.txt')

string_data = the_object.get()['Body'].read().decode('utf-8')

self.assertEqual('my dog has fleas', string_data)

@mock_s3

def test_bucket_can_be_accessed_with_setup(self):

self.do_test()

@mock_s3

def test_bucket_can_be_accessed_without_setup(self):

# This does what setUp() should

s3 = boto3.resource('s3', region_name='us-east-1')

s3.create_bucket(Bucket='bucket')

key = 'a/b/c/d.txt'

object = s3.Object('bucket', key)

object.put(Body='my dog has fleas')

self.do_test()

当我不依赖

设置()

,一切如期而至

Testing started at 07:49 ...

/Users/paul/.virtualenvs/nui-converter/bin/python "/Applications/PyCharm CE.app/Contents/helpers/pycharm/_jb_unittest_runner.py" --target BucketFacade2Tests.BucketFacadeTests.test_bucket_can_be_accessed_without_setup

Launching unittests with arguments python -m unittest BucketFacade2Tests.BucketFacadeTests.test_bucket_can_be_accessed_without_setup in /Users/Paul/as/nui-converter/tests/InventoryLoader

setUp called

Ran 1 test in 0.103s

OK

Process finished with exit code 0

但当我真的依赖

设置()

Testing started at 07:56 ...

/Users/paul/.virtualenvs/nui-converter/bin/python "/Applications/PyCharm CE.app/Contents/helpers/pycharm/_jb_unittest_runner.py" --target BucketFacade2Tests.BucketFacadeTests.test_bucket_can_be_accessed_with_setup

Launching unittests with arguments python -m unittest BucketFacade2Tests.BucketFacadeTests.test_bucket_can_be_accessed_with_setup in /Users/Paul/as/nui-converter/tests/InventoryLoader

setUp called

Ran 1 test in 0.183s

FAILED (errors=1)

Error

Traceback (most recent call last):

File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/case.py", line 59, in testPartExecutor

yield

File "/usr/local/Cellar/python/3.7.1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/case.py", line 615, in run

testMethod()

File "/Users/paul/.virtualenvs/nui-converter/lib/python3.7/site-packages/moto/core/models.py", line 74, in wrapper

result = func(*args, **kwargs)

File "/Users/Paul/as/nui-converter/tests/InventoryLoader/BucketFacade2Tests.py", line 27, in test_bucket_can_be_accessed_with_setup

self.do_test()

File "/Users/Paul/as/nui-converter/tests/InventoryLoader/BucketFacade2Tests.py", line 22, in do_test

string_data = the_object.get()['Body'].read().decode('utf-8')

File "/Users/paul/.virtualenvs/nui-converter/lib/python3.7/site-packages/boto3/resources/factory.py", line 520, in do_action

response = action(self, *args, **kwargs)

File "/Users/paul/.virtualenvs/nui-converter/lib/python3.7/site-packages/boto3/resources/action.py", line 83, in __call__

response = getattr(parent.meta.client, operation_name)(**params)

File "/Users/paul/.virtualenvs/nui-converter/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call

return self._make_api_call(operation_name, kwargs)

File "/Users/paul/.virtualenvs/nui-converter/lib/python3.7/site-packages/botocore/client.py", line 661, in _make_api_call

raise error_class(parsed_response, operation_name)

botocore.errorfactory.NoSuchBucket: An error occurred (NoSuchBucket) when calling the GetObject operation: The specified bucket does not exist

Process finished with exit code 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值