[IMP] test discovery, documentation, deprecation warnings
* document and warn that checks and fast_suite in tests sub-packages are deprecated and have no effect * avoid iterating all currently loaded modules when looking for test modules in a tests sub-package * replace use of __import__ by importlib Fixes #3152
This commit is contained in:
parent
da4db6a8ae
commit
9808ca3e31
|
@ -24,8 +24,16 @@ and ``__init__.py`` contains::
|
||||||
|
|
||||||
from . import test_foo, test_bar
|
from . import test_foo, test_bar
|
||||||
|
|
||||||
.. note:: test modules which are not imported from ``tests/__init__.py`` will
|
.. warning::
|
||||||
not be run
|
|
||||||
|
test modules which are not imported from ``tests/__init__.py`` will not be
|
||||||
|
run
|
||||||
|
|
||||||
|
.. versionchanged:: 8.0
|
||||||
|
|
||||||
|
previously, the test runner would only run modules added to two lists
|
||||||
|
``fast_suite`` and ``checks`` in ``tests/__init__.py``. In 8.0 it will
|
||||||
|
run all imported modules
|
||||||
|
|
||||||
The test runner will simply run any test case, as described in the official
|
The test runner will simply run any test case, as described in the official
|
||||||
`unittest documentation`_, but Odoo provides a number of utilities and helpers
|
`unittest documentation`_, but Odoo provides a number of utilities and helpers
|
||||||
|
@ -46,8 +54,8 @@ been installed, and not run right after the module installation:
|
||||||
.. autofunction:: openerp.tests.common.post_install
|
.. autofunction:: openerp.tests.common.post_install
|
||||||
|
|
||||||
The most common situation is to use
|
The most common situation is to use
|
||||||
:class:`~openerp.tests.common.TransactionCase` and test a property of a of a
|
:class:`~openerp.tests.common.TransactionCase` and test a property of a model
|
||||||
model in each method::
|
in each method::
|
||||||
|
|
||||||
class TestModelA(common.TransactionCase):
|
class TestModelA(common.TransactionCase):
|
||||||
def test_some_action(self):
|
def test_some_action(self):
|
||||||
|
@ -67,7 +75,7 @@ Tests are automatically run when installing or updating modules if
|
||||||
Odoo server.
|
Odoo server.
|
||||||
|
|
||||||
As of Odoo 8, running tests outside of the install/update cycle is not
|
As of Odoo 8, running tests outside of the install/update cycle is not
|
||||||
|
supported.
|
||||||
|
|
||||||
.. _unittest2: http://pypi.python.org/pypi/unittest2
|
.. _unittest2: http://pypi.python.org/pypi/unittest2
|
||||||
.. _unittest documentation: https://docs.python.org/2/library/unittest.html
|
.. _unittest documentation: https://docs.python.org/2/library/unittest.html
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
import imp
|
import imp
|
||||||
|
import importlib
|
||||||
|
import inspect
|
||||||
import itertools
|
import itertools
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
@ -366,23 +368,26 @@ def adapt_version(version):
|
||||||
return version
|
return version
|
||||||
|
|
||||||
def get_test_modules(module):
|
def get_test_modules(module):
|
||||||
""" Return a list of module for the addons potentialy containing tests to
|
""" Return a list of module for the addons potentially containing tests to
|
||||||
feed unittest2.TestLoader.loadTestsFromModule() """
|
feed unittest2.TestLoader.loadTestsFromModule() """
|
||||||
# Try to import the module
|
# Try to import the module
|
||||||
module = 'openerp.addons.' + module + '.tests'
|
modpath = 'openerp.addons.' + module
|
||||||
try:
|
try:
|
||||||
__import__(module)
|
mod = importlib.import_module('.tests', modpath)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
# If module has no `tests` sub-module, no problem.
|
# If module has no `tests` sub-module, no problem.
|
||||||
if str(e) != 'No module named tests':
|
if str(e) != 'No module named tests':
|
||||||
_logger.exception('Can not `import %s`.', module)
|
_logger.exception('Can not `import %s`.', module)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
# include submodules too
|
if hasattr(mod, 'fast_suite') or hasattr(mod, 'checks'):
|
||||||
result = [mod_obj for name, mod_obj in sys.modules.iteritems()
|
_logger.warn(
|
||||||
if mod_obj # mod_obj can be None
|
"Found deprecated fast_suite or checks attribute in test module "
|
||||||
if name.startswith(module)
|
"%s. These have no effect in or after version 8.0.",
|
||||||
if re.search(r'test_\w+$', name)]
|
mod.__name__)
|
||||||
|
|
||||||
|
result = [mod_obj for name, mod_obj in inspect.getmembers(mod, inspect.ismodule)
|
||||||
|
if name.startswith('test_')]
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# Use a custom stream object to log the test executions.
|
# Use a custom stream object to log the test executions.
|
||||||
|
|
Loading…
Reference in New Issue