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 に答える