如何使用 MagicMock spec_set 或方法规范?
How to employ a MagicMock spec_set or spec on a method?
我正在尝试在 MagicMock
上使用一种方法作为 spec_set
。
提供了一个导致 Exception
的意外调用签名的很好示例。不幸的是,我无法通过某种方法解决它。
如果调用不符合规范,我怎样才能让下面的代码片段出错?
from unittest.mock import MagicMock
class Foo:
def bar(self) -> None:
"""Some method I want to use as a spec."""
mocking_foo_bar_1 = MagicMock(name="with spec", spec=Foo.bar)
mocking_foo_bar_2 = MagicMock(name="with spec_set", spec_set=Foo.bar)
# These aren't raising, even though they don't match the spec
mocking_foo_bar_1("this", "should", "raise")
mocking_foo_bar_2("this", "also", "should", "raise")
我正在使用 Python 3.8+。
spec
和spec_set
用于限制允许Mock
访问的属性集。对于函数,有 create_autospec
.
Functions or methods being mocked will have their arguments checked to ensure that they are called with the correct signature.
由于 bar
是 Foo
的实例方法,您还需要创建 Foo
的实例以获得预期的函数签名。
from unittest.mock import create_autospec
mocking_foo_bar = create_autospec(Foo().bar)
mocking_foo_bar("this", "should", "raise")
这引发了一个错误:
TypeError: too many positional arguments
我正在尝试在 MagicMock
上使用一种方法作为 spec_set
。
提供了一个导致 Exception
的意外调用签名的很好示例。不幸的是,我无法通过某种方法解决它。
如果调用不符合规范,我怎样才能让下面的代码片段出错?
from unittest.mock import MagicMock
class Foo:
def bar(self) -> None:
"""Some method I want to use as a spec."""
mocking_foo_bar_1 = MagicMock(name="with spec", spec=Foo.bar)
mocking_foo_bar_2 = MagicMock(name="with spec_set", spec_set=Foo.bar)
# These aren't raising, even though they don't match the spec
mocking_foo_bar_1("this", "should", "raise")
mocking_foo_bar_2("this", "also", "should", "raise")
我正在使用 Python 3.8+。
spec
和spec_set
用于限制允许Mock
访问的属性集。对于函数,有 create_autospec
.
Functions or methods being mocked will have their arguments checked to ensure that they are called with the correct signature.
由于 bar
是 Foo
的实例方法,您还需要创建 Foo
的实例以获得预期的函数签名。
from unittest.mock import create_autospec
mocking_foo_bar = create_autospec(Foo().bar)
mocking_foo_bar("this", "should", "raise")
这引发了一个错误:
TypeError: too many positional arguments