Testing¶
Tryton supports both functional and unit tests.
Testing your module¶
Unit tests¶
Tryton provides the ModuleTestCase
class that bundles a set of tests
that are useful for every module.
Unit tests in ModuleTestCase can be decorated with
trytond.tests.test_tryton.with_transaction()
to run the test in a
transaction.
To use it in your own module you just have to inherit from
ModuleTestCase
and set the class attribute
module
to the name of your module.
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
class MyModuleTestCase(ModuleTestCase):
"My Module Test Case"
module = 'my_module'
@with_transaction()
def test_method(self):
"Test method"
self.assert_(True)
Tests from this modules are found by the function trytond.modules.my_module.tests.suite which must return a unittest.TestSuite containing all the module’s tests. This function is called by the Tryton test runner script to gather all the tests.
A typical suite() function thus looks like this:
def suite():
suite = trytond.tests.test_tryton.suite()
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
MyModuleTestCase))
suite.addTests(doctest.DocFileSuite('scenario_my_module.rst',
tearDown=doctest_teardown, encoding='utf-8',
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE,
checker=doctest_checker))
return suite
Running your module’s tests¶
Tryton provides the script trytond/tests/run-tests.py, just invoke it like that:
run-tests.py -m my_module
Testing trytond¶
Extending tests¶
Python modules extending tryton core can define additional tests that should be added to the existing ones.
Those modules must create an entry point trytond.tests. Any file in the
module path specified by this entry point starting with test_ and ending by
.py will be imported. Each of those file must define a suite() function
that returns a unittest.TestSuite that will be included in the trytond test
suite. If the module from the entry point defines a register function it
will be called when registering the test-specific models in the
trytond.pool.Pool
.
Running trytond tests¶
You should use the script trytond/tests/run-tests.py by invoking it like that:
run-tests.py [-c configuration]
You can use a different configuration file to check trytond against different backend.