- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用moto和Python 3.7来模拟一些S3交互。如果在测试方法中包含所有模拟代码,则moto似乎正常工作。当我将一些初步代码移到setUp()
时,测试失败,就好像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()
setUp()
时,一切都会按预期运行
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
setUp()
时它失败了
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
最佳答案
问题是您将ock_s3装饰器直接应用于setUp()
方法和test methods
。这将导致单独的模拟s3环境,因此不会共享setUp()
方法中所做的任何事情。
解决方案是将@mock_s3
装饰器应用于整个BucketFacadeTests
类。
下面的代码应该可以正常工作。
import unittest
import boto3
from moto import mock_s3
@mock_s3
class BucketFacadeTests(unittest.TestCase):
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)
def test_bucket_can_be_accessed_with_setup(self):
self.do_test()
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()
关于amazon-web-services - Moto不适用于python单元测试setUp()调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53945526/
我希望有人能帮我解决这个问题。 前段时间我开发了一个应用程序,目的是在智能手机中同时记录前置麦克风和后置麦克风捕获的声音。基本上,我会像这样制作下一个对象: AudioRecord audioReco
我正在编写一个 lambda 函数,它获取 CW 日志组列表并对每个日志组运行“导出到 s3”任务。 我正在使用 pytest 编写自动化测试我正在使用 moto.mock_logs (除其他外),但
我有一个名为 check_stuff 的函数,它实例化一个对象并调用函数 describe_continuous_backups,但是,moto 尚不支持此功能,因此我需要自己手动模拟它。我有以下内容
总而言之,我一遍又一遍地在谷歌上搜索以找到解决方案,虽然我发现了一个关于相机释放等的错误,但我似乎无法让凸轮代码正常工作。每次我执行 takePicture 时,系统都会挂起,有时它会调用 Pictu
我不知道其他人是否也遇到过这种情况。连接到 Moto 360 (Android Wear) 上的 Sensor.TYPE_MAGNETIC_FIELD 传感器时,我没有收到任何更新。 以下代码都有效:
我目前正在尝试使用 Moto 和 @mock_dynamodb2 为我的 python 代码编写单元测试。到目前为止,我一直在测试我的“成功操作”测试用例。但是我很难让它为我的“失败案例”工作。 在我
通过 goCoder SDK 使用 Wowza Streaming Cloud 开始流式传输时,Moto g 和三星 s6 中的摄像头当时无法打开,但当我切换摄像头时,两个摄像头(后置和前置)都可以正
我需要访问 Moto 设备 (5.0.1) 上的数据漫游状态 if (Settings.Secure.getInt(context.getContentResolver(),Settings.Secu
上周买了新的 Moto G XT1033,手机工作正常,但作为开发人员,我发现在 Debug模式下很难,即使在开发人员选项中启用 USB 调试选项之后... 必要时出现错误 USB 驱动程序 未找到
我有一台 Windows 7 x64 Ultimate 计算机,我想在 Debug模式下连接我的 Moto X 2nd Gen (XT1097),以便我可以开发一些应用程序。 p> 问题是,Windo
我正在尝试测试一些使用 boto 的 python 代码。我不想尝试针对 AWS 进行集成测试,所以我尝试用 moto 模拟它,但它的行为并不像我预期的那样。 测试代码如下: import io im
我最近在 android wearable(MOTO 360) 上开发应用。 我的问题是,是否可以将传感器数据作为文件保存在我的 watch 中?或者我必须将这些数据发送回我的掌上电脑进行保存? 我尝
我编写了一个在圆形和方形 watch 上运行的应用程序,具有两个布局和一个 watchViewStub。由于 moto 360 在欧洲销售,我有很多报告说 Moto 360 没有加载圆形布局。使用模拟
我正在尝试通过蓝牙在我的 Moto 360 上进行调试。我正在关注这些 instructions但是当我输入 adb forward tcp:4444 localabstract:/adb-hub;
我正在测试一些 dynamodb 访问代码。在过去,对分页的不正确处理导致了错误(开发人员倾向于使用少量数据进行手动测试,因此很容易对分页的工作原理做出错误的假设,只有在处理实际数据量时才会出现这种假
在我的代码中的某处,lambda 被调用以返回 true/false 响应。我试图在我的单元测试中模拟这个 lambda 但没有成功。 这是我的代码: def _test_update_allowed
我正在尝试用 moto 模拟 AWS SQS,下面是我的代码 from myClass import get_msg_from_sqs from moto import mock_sqs #from
在我的单元测试中: def test_my_function_that_publishes_to_sns(): conn = boto3.client("sns", region_name="
我正在尝试模拟计算环境的创建,这需要一些其他资源,即 IAM 实例配置文件和服务角色。但是,当我创建这些 IAM 资源然后尝试在计算环境创建中使用它们时,事情失败了: Role arn:aws:iam
我想对从 aws 导入的文件进行测试。 我使用 moto 模拟 s3,以免弄乱实际数据。但是,现在 aws 似乎是空的,因此我决定在模拟的 s3 上上传一些测试文件。我该怎么做? 这是我的设置, 比赛
我是一名优秀的程序员,十分优秀!