我有一个类似于下面这样的抽象基类:
class MyAbstractClass(object):
__metaclass__ = ABCMeta
@abstractproperty
def myproperty(self): pass
当我在我的项目上运行nosetests(使用覆盖率工具),它却抱怨说属性def行未被测试。就我所知,由于实例化抽象类将导致引发异常,因此实际上无法测试该行代码。
是否有任何解决方法,或者我只能接受不到100%的测试覆盖率?
当然,我可以删除ABCMeta用法并仅使基类引发NotImpementedError,但我更喜欢前一种方法。
#pragma: no cover
,并采用了内联方式。我不喜欢在抽象属性中使用实现(即使只是raise NotImplementedError
),因为这似乎违背了初衷。 - Demian Brechtpass
。这样做的额外好处是为你的抽象方法/属性提供文档,说明它们预期如何运作。 - Wesley Baugh