python - 在 Python 中测试抽象类

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

最佳答案

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

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

关于python - 在 Python 中测试抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18549116/

相关文章:

Python 链式 get() 方法与 JSON 中的列表元素

python - 使用 Matplotlib 和 Numpy,有没有办法找到线性方程的所有直线交点?

python - 有没有另一种更好的方法从python中的给定路径获取文件ext

python - SQLAlchemy 返回元组而不是字典

python - Sympy:Matrix.doit() 不适用于矩阵元素

python - 如何将列添加到多索引数据帧?

python - 如何在sklearn grid search中使用log loss

objective-c - 如何实现或模拟 "abstract"OCUnit 测试类?

c# - MSTest 中的 runsettings 和 testsettings 到底有什么区别

unit-testing - 单元测试 Dart 异步流