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

时间:2013-12-09 10:49:52

标签: 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 ()中引发错误。我正在寻找解决这个问题的最佳方法,但我不确定要嘲笑什么。错误并不重要/不会影响我编写和运行的任何测试,所以我只需要一种回避这个特定错误的方法。

1 个答案:

答案 0 :(得分:1)

我认为你有一个设计问题:

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

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

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

编辑:

但是,如果您真的知道自己在做什么,可以轻松放弃父__init__

MyBaseClass.__init__ = lambda self: None