Testing

Tryton supports both functional and unit tests.

Testing your module

Functional tests

Functional tests are written as doctests using proteus.

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.