3

考虑以下场景。

import six
from abc import ABCMeta, abstractmethod


class ThisIsAnAbstractClass(six.with_metaclass(ABCMeta)):
    @abstractmethod
    def __init__(self,parameter):
        self.parameter = parameter

    def do_something():
        """do something"""

有一个类扩展形式 ABCMeta(一个抽象类),其中包含一个抽象方法。由于该抽象init () 方法,无法初始化此类。有没有办法测试这个类?(至少使用任何测试框架)

4

1 回答 1

4

创建抽象类的子类,然后测试子类。

from abc import ABCMeta, abstractmethod

class ThisIsAnAbstractClass(object):
    __metaclass__ = ABCMeta # <--

    @abstractmethod
    def __init__(self, parameter):
        self.parameter = parameter

    def do_something():
        """do something"""

class ConcreteClass(ThisIsAnAbstractClass):
    def __init__(self, parameter):
        super(ConcreteClass, self).__init__(parameter)

try:
    ThisIsAnAbstractClass('test')
    assert False, 'Abstract class instance created!'
except TypeError:
    pass

assert ConcreteClass('test').parameter == 'test'

注意:您应该abc.ABCMeta用作元类。

于 2013-08-31T14:25:26.670 回答