如何在不在Python中实例化基类的情况下测试子类方法?

时间:2016-07-01 09:03:57

标签: python unit-testing testing

我是Python的新手,我需要在不初始化基类实例的情况下测试子类方法,因为在基类中,网络和其他一些组件有很多依赖关系,我的子类方法是 独立的。

我试图通过从子类中删除基类方法来创建一个新的子类,但它无法工作。这是代码。

def remove_base(child_cls, base_cls):
    allmembers = inspect.getmembers(child_cls, predicate=inspect.ismethod)
    allmembers_dict = dict(allmembers)
    hbasemembers = inspect.getmembers(base_cls, predicate=inspect.ismethod)
    hbase_dict = dict(hbasemembers)
    child_class_member = set(allmembers_dict.keys()) - set(hbase_dict.keys())
    new_dict = {}
    for key in allmembers_dict.keys():
        for child_member in child_class_member:
            if key == child_member:
                new_dict[key] = allmembers_dict[key]
    return new_dict

class A:
    def add(self, i):
        print i + 1

class B(A):
    def sub(self, i):
        print i - 1

newB = type("newB", (object, ), remove_base(B, A))
b = newB()
b.sub(5)

错误消息是:

  

TypeError:必须使用B实例调用未绑定方法sub()   第一个参数(改为使用int实例)

我认为删除基类方法的方法可能是错误的。 如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

您可以直接使用__dict__中的B

class A(object):
    def add(self, i):
        print(i + 1)

class B(A):
    def sub(self, i):
        print(i - 1)

newB = type("newB", (object, ), dict(B.__dict__))
b = newB()
b.sub(5)