Testing Strategies and Test-Driven Development (TDD)
Writing unit tests with TransactionCase, HTTP tests with HttpCase, and creating fast offline test suites without database overhead.
1. Overview & Business Value#
This comprehensive operational guide details the architecture, business workflows, configuration parameters, and execution steps for Testing Strategies and Test-Driven Development (TDD) within SmartERP.
SmartERP enforces layered testing: fast offline checks run in sub-seconds, followed by module transaction tests, and integration regression suites.
TransactionCase Example#
from odoo.tests.common import TransactionCase, tagged
@tagged('post_install', '-at_install')
class TestAssetLifecycle(TransactionCase):
def setUp(self):
super().setUp()
self.asset = self.env['smarterp.enterprise.asset'].create({
'name': 'Server Rack A1',
'cost': 45000.0,
})
def test_asset_creation(self):
self.assertEqual(self.asset.name, 'Server Rack A1')
self.assertGreater(self.asset.cost, 0)
{screenshot:testing-and-test-driven-development-overview-dashboard}
2. Prerequisites & Security Access Groups#
- Required Modules:
base, web, smarterp_core - Security Groups:
Enterprise Developer(Technical ID:base.group_no_one)System Administrator(Technical ID:base.group_system)
- Master Data Dependencies: Established local development toolchain (Python 3.12+, PostgreSQL 16), cloned repository (
smarterp-platform), and valid database configuration.
3. Step-by-Step Configuration & Execution#
Step 1: Navigating to the Module Interface#
- Open your terminal or development environment in the repository root (
/Users/danielbekele/smarterp-platform). - Activate your dedicated Python virtual environment.
- Verify Git branch status:
git status.
{screenshot:testing-and-test-driven-development-app-switcher-navigation}
Step 2: Creating and Parameterizing Records#
- Execute development commands or scaffolding templates.
- Define mandatory manifest parameters:
- name (Mandatory): Descriptive module title.
- version (Mandatory): Standard semantic versioning (e.g.
19.0.1.0.0). - depends (Mandatory): Explicit list of upstream module dependencies.
- license (Mandatory): Open source or proprietary enterprise license identifier.
- Configure optional parameters: data files, security ACLs, and automated test cases.
{screenshot:testing-and-test-driven-development-record-creation-form}
Step 3: Validating and Processing Transactions#
- Execution & Testing: Run unit tests via
odoo-bin -i <module_name> --test-enable --stop-after-init. - Quality Verification: Ensure test suite passes with zero errors and zero unhandled warnings.
{screenshot:testing-and-test-driven-development-transaction-processing-state}
4. Advanced Configuration Points#
- Automated Actions & Scheduled Tasks (Crons):
Developer: Module test runner trigger(base.ir_cron_run_tests)System: Automated cache cleanup(base.ir_cron_cache_cleanup)
- Custom Print Templates & Reports:
- Technical Data Dictionary Specification
- Code Quality & Test Coverage Dossier
- Multi-Company Rules: Record-level security isolation under Company 1 (
Ashewa Technology Solutions S.C.).
5. Comprehensive Troubleshooting Matrix#
| Error Symptom / Exception | Probable Root Cause | Corrective Action / Resolution |
|---|---|---|
ImportError: cannot import name from odoo | Outdated virtualenv or PYTHONPATH misconfiguration. | Re-activate virtualenv and verify that Odoo 19 libraries are correctly installed. |
ParseError: Element '<tree>' is deprecated | Attempting to use legacy Odoo tree view syntax in Odoo 19. | Replace <tree> with <list> in the view XML definition. |
ValidationError: External ID not found | Manifest data list contains an item before its prerequisite is loaded. | Re-order XML filenames in __manifest__.py so security and parent menus load first. |