Verify interface contract for all implements/classImplements declaration
Project description
Introduction
What’s the use to declare an interface if your class doesn’t implement correctly the interface ?
Of course you should verify that in a test but if you don’t want to write a test to check that all your code really implements the promised interfaces use this package.
It’s a simple patch that calls zope.interface.verify.verifyClass once you declare implementing an interface and print the BrokenImplementation or BrokenMethodImplementation as a warning (if any).
Simple example in testrunner:
By default the egg enable interface contract verification for zope.interface.implements and zope.interface.classImplements that are present in all your packages:
>>> 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.
Limit verifications
But you can limit the package where this verification needs to be done (sometimes you don’t care that a package you depend on didn’t implement correctly an interface).
This is done by adding an environment variable verifyinterface where you specify what packages/modules (separated by n as usual) you accept to verify interfaces.
Here is a simple example where I only want to have warning for bad implementation of interfaces used by module1:
>>> 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.
Changelog
0.1 (2009-12-18)
Initial release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for affinitic.verifyinterface-0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 314df53c28fe2b7f4d2610508b0154239021956d580b69466ca1769b578b6e02 |
|
MD5 | 484e82a7e2774ad0cbdf146845311d08 |
|
BLAKE2b-256 | 9639f7ca7bd412e7430f634c2f44d6c836fc8ad7cd07251d95f12e3715008bd4 |