Skip to main content
 首页 » 编程设计

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

2025年05月04日8xing901022

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

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