在Python中测试抽象类

时间:2013-08-31 14:17:40

标签: python unit-testing python-2.7 nosetests python-unittest

请考虑以下情况。

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 ()方法,无法初始化此类。有没有办法测试这个课程? (至少使用任何测试框架)

1 个答案:

答案 0 :(得分:3)

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

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作为元类。