2013-08-31 3 views
3

다음 시나리오를 고려하십시오.Python의 추상 클래스 테스트

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() 메소드로 인해이 클래스를 초기화 할 수 없습니다. 이 수업을 테스트 할 수있는 방법이 있습니까? (최소한 테스트 프레임 워크를 사용하여)

답변

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을 메타 클래스로 사용해야합니다.

+0

잊어 버린 그 metaclass.Edited. 나는 그것이 자기 자신을 추상 클래스로 테스트하고 싶다고 생각했다. 그 하위 클래스를 만드는 것 외에 다른 방법이없는 것처럼 보입니다. – maheshakya