Testing obsolete interfaces

Martin Pool mbp at canonical.com
Wed May 10 03:24:49 BST 2006


On  9 May 2006, Aaron Bentley <aaron.bentley at utoronto.ca> wrote:
> Jan Hudec wrote:
> > Hello,
> > 
> > The test suite prints all deprecation warnings on the error output. But isn't
> > it supposed to test deprecated interfaces as long as they are kept around?
> 
> Whenever an interface becomes deprecated, none of the core code should
> use it.  Printing deprecation warnings during test runs is a good way to
> catch that when it does happen.
> 
> It's hard to distinguish between tests of deprecated functions and tests
> of undeprecated functions that happen to call deprecated functions,
> which means we're getting error output even for deprecations warnings we
> expect.
> 
> Perhaps we need a decorator to suppress expected deprecations warnings
> for test cases that exercise deprecated interfaces.

Something like

def test_deprecated_function():
  warnings.filterwarnings('ignore', 'frob_thing is deprecated.*')
  try: 
    frob_thing(3)
  finally:
    unfilter_it()

On a brief look at the warnings module there isn't a clear way to remove
just the one specific filter we had put in place, but it can probably be
done, by brute force if necessary.

Also we should probably make a UserWarning subclass for deprecations.

Or perhaps more simply, the test case for a class can just filter out
all deprecation warnings for calls to deprecated methods of the class 
directly from the test:

  warnings.filterwarnings('ignore', 'SomeClass.* is deprecated', 
                          DeprecationWarning, 'test_some_class')

and then not worry about pulling it out.  I have not tested yet if this
works.

-- 
Martin




More information about the bazaar mailing list