【问题标题】:Test broken after upgrade to latest moto version (1.3.15 and 1.3.16)升级到最新的 moto 版本(1.3.15 和 1.3.16)后测试中断
【发布时间】:2020-12-16 09:55:28
【问题描述】:

将 moto 从版本 1.3.14 更新到 1.3.15/1.3.16 会中断测试并引发异常。

即使单独使用注解也会引发错误。

我使用这个requiriments.txt 文件:

moto==1.3.16

此测试示例适用于 moto 1.3.14,但不适用于较新的版本:

from moto import mock_s3
import unittest

@mock_s3
class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')


if __name__ == '__main__':
    unittest.main()

这是执行python3 -m unittest mytest.py时的错误:

(venv) ~/p/mocotest $ python3 -m unittest mytest.py
ETraceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/lib/python3.8/unittest/__main__.py", line 18, in <module>
    main(module=None)
  File "/usr/lib/python3.8/unittest/main.py", line 101, in __init__
    self.runTests()
  File "/usr/lib/python3.8/unittest/main.py", line 271, in runTests
    self.result = testRunner.run(self.test)
  File "/usr/lib/python3.8/unittest/runner.py", line 176, in run
    test(result)
  File "/usr/lib/python3.8/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.8/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.8/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.8/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.8/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3.8/unittest/suite.py", line 122, in run
    test(result)
  File "/usr/lib/python3.8/unittest/case.py", line 736, in __call__
    return self.run(*args, **kwds)
  File "/home/cerveraa/projects/mocotest/venv/lib/python3.8/site-packages/moto/core/models.py", line 102, in wrapper
    self.stop()
  File "/home/cerveraa/projects/mocotest/venv/lib/python3.8/site-packages/moto/core/models.py", line 86, in stop
    self.default_session_mock.stop()
  File "/home/cerveraa/projects/mocotest/venv/lib/python3.8/site-packages/mock/mock.py", line 1563, in stop
    return self.__exit__(None, None, None)
  File "/home/cerveraa/projects/mocotest/venv/lib/python3.8/site-packages/mock/mock.py", line 1529, in __exit__
    if self.is_local and self.temp_original is not DEFAULT:
AttributeError: '_patch' object has no attribute 'is_local'

版本:

  • Python 3.8.5
  • 点 20.0.2

有什么建议吗?

注 1: 对于测试,我使用的是全新的 venv 环境,安装的唯一库是 moto

注2: 使用 1.3.14 可以正常工作,但在安装依赖项时会出现警告:

ERROR: python-jose 3.2.0 has requirement ecdsa<0.15, but you'll have ecdsa 0.16.1 which is incompatible

【问题讨论】:

  • 相同。我对这个空间完全陌生。不知道这个错误是什么意思。我降级到 moto 1.3.14,它现在似乎可以工作了。

标签: python moto


【解决方案1】:
  • 这是motomock库之间的兼容性问题
  • 使用 moto 版本 moto==1.3.16 和 mock 版本 mock==4.0.2 为我解决了这个问题。

【讨论】:

    【解决方案2】:

    同样的问题。 moto 模型的补丁功能会影响模拟功能。

    (解决方法):注释行受到影响

    def __exit__(self, *exc_info):
            """Undo the patch."""
            #if self.is_local and self.temp_original is not DEFAULT:
            #    setattr(self.target, self.attribute, self.temp_original)
            #else:
            #    delattr(self.target, self.attribute)
            #    if not self.create and (not hasattr(self.target, self.attribute) or
            #                self.attribute in ('__doc__', '__module__',
            #                                   '__defaults__', '__annotations__',
            #                                   '__kwdefaults__')):
            #        # needed for proxy objects like django settings
            #        setattr(self.target, self.attribute, self.temp_original)
    
            #del self.temp_original
            #del self.is_local
            #del self.target
            exit_stack = self._exit_stack
            #del self._exit_stack
            return exit_stack.__exit__(*exc_info)
    

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 1970-01-01
      • 2012-04-21
      • 2022-01-05
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多