假设我使用库的抽象类作为我自己的抽象基类的基础,所以
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/