首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建类似类对象的MagicMock,并在实例化时创建MagicMock实例

创建类似类对象的MagicMock,并在实例化时创建MagicMock实例
EN

Stack Overflow用户
提问于 2020-06-13 15:58:14
回答 1查看 1.3K关注 0票数 0

我有一个相当有趣的问题。我试图模拟一个类,该类将通过内部验证,并且在实例化时将返回一个magicmock实例。

例如,我有一个pydantic模型来验证以下字段:

代码语言:javascript
复制
from typing import Type
from pydantic import BaseModel

class SomeClass:
    pass

class SubSomeClass(SomeClass):
    pass

class OtherClass:
    pass

class SomeModel(BaseModel):
    cls: Type[SomeClass]

# here I can put either `SomeClass` or its subclasses
validated_some = SomeModel(cls=SubSomeClass)

# this would cause ValidationError
SomeModel(cls=OtherClass)
"""
pydantic.error_wrappers.ValidationError: 1 validation error for SomeModel
cls
  subclass of SomeClass expected (type=type_error.subclass; expected_class=SomeClass)
"""

现在,在我的测试中,我试图使用SomeClass来模拟MagicMock,但是我不能创建一个模拟的类对象,它的行为就像SomeClass的子类。

我尝试了以下几点:

代码语言:javascript
复制
>>> type(Mock(spec=SomeClass))
<class 'unittest.mock.Mock'> # doesn't pass validation
代码语言:javascript
复制
class MockSomeClass(SomeClass, MagicMock):
    """Mocked SomeClass"""

    def __init__(self, *args, **kwargs):
        pass

实例化时不返回MagicMock实例,即MockSomeClass()

基本上,我需要的东西应该是:

代码语言:javascript
复制
>>> type(mocked_some_class)
<class 'type'>
>>> import inspect
>>> inspect.getmro(mocked_some_class)
(..., <class '__main__.SomeClass'>, ...)
>>> mocked_some_class()
<MagicMock id='...'>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-14 17:42:32

以下是我最后所做的事情:

代码语言:javascript
复制
from unittest.mock import Mock

class MockSomeClass(SomeClass, Mock):
    """Mocked SomeClass class"""

    def __new__(cls, *args, **kwargs):
        return MagicMock()

现在所有的检查都通过了:

代码语言:javascript
复制
>>> type(MockSomeClass)
<class 'type'>

>>> inspect.getmro(MockSomeClass)
(<class '__main__.MockSomeClass'>, <class '__main__.SomeClass'>, <class 'unittest.mock.Mock'>, ...)

>>> MockSomeClass()
<MagicMock id='...'>

希望,它会对某人有用!)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62362296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档