我有一个抽象的基类沿着它是这样的:
class MyAbstractClass(object):
__metaclass__ = ABCMeta
@abstractproperty
def myproperty(self): pass
但是当我在我的项目上运行nosetests(which coverage)时,它会抱怨属性def行未测试。它不能 * 实际 * 被测试(AFAIK),因为抽象类的示例化将导致引发异常。
是否有任何变通方法,或者我必须接受< 100%的测试覆盖率?
当然,我也可以去掉ABCMeta
的用法,让基类提升NotImpementedError
,但我更喜欢前一种方法。
4条答案
按热度按时间qpgpyjmq1#
对我来说,最好的解决方案是@Wesley在他对公认答案的评论中提到的,特别是用抽象属性的文档字符串替换'pass',例如:
roqulrg32#
没有办法精确地排除抽象属性,但是如果你做一个小小的改变,你可以。让抽象属性引发错误:
然后,您可以指示coverage.py忽略引发NotImplementedError的行。创建一个.coveragerc文件,并在其中放入:
有关您可能希望始终忽略的线条类型的更多想法,请参见:http://nedbatchelder.com/code/coverage/config.html
svgewumm3#
我在
.coveragerc
中有自定义跳过逻辑:这样所有的abstractmethods和abstractproperties都被标记为skipped。
jgzswidk4#
直接从docs。在
pyproject.toml
中添加以下部分:或
.coveragerc