跳转到主要内容

验证所有实现/类实现的接口合约

项目描述

简介

如果你的类没有正确实现接口,声明接口有什么用呢?

当然,你应该在测试中验证这一点,但如果你不想编写测试来检查所有代码是否真正实现了承诺的接口,请使用此包。

这是一个简单的补丁,它在你声明实现接口后调用 zope.interface.verify.verifyClass,并打印BrokenImplementation或BrokenMethodImplementation作为警告(如果有)。

在测试运行器中的简单示例

默认情况下,egg为所有包中的 zope.interface.implementszope.interface.classImplements 启用接口合约验证

>>> write('buildout.cfg',
... """
... [buildout]
... parts =
...     test
...
... [test]
... recipe = zc.recipe.testrunner
... eggs = affinitic.verifyinterface
...        zope.exceptions
... defaults = ['-m', 'module']
... """)

>>> print system(buildout)
Installing test.
...

>>> from os.path import join
>>> print system(join('bin', 'test')),
<class 'affinitic.verifyinterface.tests.test_module1.Foo'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>
<BLANKLINE>
        The bla attribute was not provided.
<BLANKLINE>
<class 'affinitic.verifyinterface.tests.test_module2.Bar'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module2.IBar>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module2.IBar>
<BLANKLINE>
        The bla attribute was not provided.
<BLANKLINE>
Running zope.testing.testrunner.layer.UnitTests tests:
  Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
  Ran 2 tests with 0 failures and 0 errors in 0.000 seconds.
Tearing down left over layers:
  Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds.

限制验证

但你可以限制需要执行此验证的包(有时你不在乎你依赖的包是否正确实现了接口)。

这通过添加环境变量 verifyinterface 来完成,其中指定了你要验证接口的包/模块(通常用n分隔)。

以下是一个简单示例,我只希望对模块1使用的接口的错误实现发出警告

>>> write('buildout.cfg',
... """
... [buildout]
... parts =
...     test
...
... [test]
... recipe = zc.recipe.testrunner
... eggs = affinitic.verifyinterface
...        zope.exceptions
... defaults = ['-m', 'module']
... environment = testenv
...
... [testenv]
... verifyinterface = affinitic.verifyinterface.tests.test_module1
... """)

>>> print system(buildout)
Uninstalling test.
Installing test.
...

>>> from os.path import join
>>> print system(join('bin', 'test'))
<class 'affinitic.verifyinterface.tests.test_module1.Foo'> failed implementing <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>: An object has failed to implement interface <InterfaceClass affinitic.verifyinterface.tests.test_module1.IFoo>
<BLANKLINE>
        The bla attribute was not provided.
<BLANKLINE>
Running zope.testing.testrunner.layer.UnitTests tests:
  Set up zope.testing.testrunner.layer.UnitTests in 0.000 seconds.
  Ran 2 tests with 0 failures and 0 errors in 0.000 seconds.
Tearing down left over layers:
  Tear down zope.testing.testrunner.layer.UnitTests in 0.000 seconds.

变更日志

0.1 (2009-12-18)

  • 首次发布

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

affinitic.verifyinterface-0.1.tar.gz (4.6 kB 查看哈希值)

上传时间 源代码

由以下提供支持