python - 单元测试 - 模拟/抑制对象的 __init__

标签 python python-unittest

假设我使用库的抽象类作为我自己的抽象基类的基础,所以

class LibBaseClass():

    some_var = None  # In any non-abstract versions of this class, this must be set

    def __init__(self):
        if some_var is None:
            raise ImproperlyConfigured("some_var Not set!")

现在我有了自己的使用这个类的基类...

class MyBaseClass(LibBaseClass():

    some_var = None  # Still None, doesn't make sense for this var to be set to anything

    def my_additional_method(self):
        ....

现在我来测试MyBaseClass时,在setUp()方法中,我想初始化这个类,所以:

my_class = MyBaseClass()

但这当然会从库的基类 init() 引发错误。我正在寻找解决此问题的最巧妙方法,但我完全不确定要 mock 什么。该错误并不重要/不会影响我编写和运行的任何测试,因此我只需要一种方法来回避这个特定错误。

最佳答案

我认为你这里有设计问题:

some_var = None # 在此类的任何非抽象版本中,必须设置此项

some_var = None # 仍然是 None,将此 var 设置为任何值都没有意义

这两个说法相互矛盾。 因此,您应该设置 some_var 或在未设置时停止引发异常。 此外,如果 MyBaseClass 应该是抽象的,则不应实例化它。

编辑:

然而,如果你真的知道你在做什么,你可以轻松地删除父 __init__:

MyBaseClass.__init__ = lambda self: None

关于python - 单元测试 - 模拟/抑制对象的 __init__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20468686/

相关文章:

python - 强制使用多核

python - 打开 IPython 笔记本时出错

Python 单元测试在所有测试后运行函数

Python 模拟 : Patching Python Pika's "basic_publish" function

python - 从 __main__ 命令行调用单元测试失败

python - 尽管使用 --natural 标志,外键约束仍失败

python - 无法使用 sklearn 加载 'mnist-original' 数据集

python - 询问用户输入,直到他们给出有效的响应

windows - python unittest的返回状态

python - 如何为使用 boto3 导入的 cognito 客户端编写单元测试?