用途:为 Odoo 自定义模块添加实用测试,优先在 Odoo 行为边界处测试,如 ORM 流程、约束、计算字段、访问规则、控制器、报表、表单、工作流与集成边界。
写测试前:确认 addon/模块与目标 Odoo 版本;检查 manifest.py、models/、views/、security/、controllers/、report/、static/src/、现有 tests/ 与相关文档;若设置了 $ODOO_SOURCE,检查本地测试辅助代码与框架行为,而非猜测。
测试类型选择:多数模型/业务逻辑用 TransactionCase(每个测试在保存点运行并回滚);会计测试需要公司、产品、合作伙伴、税、日记账或发票时用 AccountTestInvoicingCommon;测试默认值、onchange、表单校验、One2many/Many2many 表单行为或类用户表单流程用 Form 辅助类;浏览器、tour、website、portal、控制器或完整 UI 流程用 HttpCase;只读套件或昂贵初始化且可接受跨测试状态时用 SingleTransactionCase;外部 API、支付网关、OAuth、webhook、文件系统、时间或慢服务用 unittest.mock.patch/MagicMock,不要模拟 Odoo 内部,除非没有更好的边界。
目录结构:模块下 tests/ 目录含 init.py(在此导入测试模块,勿在模块 init.py 导入测试)、可选的 common.py 共享夹具/辅助函数,以及 test_.py;每个新 test_.py 必须从 tests/init.py 导入,否则 Odoo 测试运行器不会发现。
工作流程:映射要证明的行为与最小 Odoo 边界;仅将可复用夹具/辅助放入 common.py;除 setUpClass 中不可变设置外,在每个测试内创建新的可变记录;测试体用 Arrange、Act、Assert 分段;覆盖正常路径、校验/错误路径与相关副作用;访问/安全变更用 with_user() 测试真实用户/组/公司;外部集成在调用处打补丁并断言状态变化与 mock 调用;性能敏感代码在目标版本支持时添加 assertQueryCount;仅在证据需要时更新 tests/init.py 与 manifest 依赖;OWL 组件、服务、注册表、字段组件与 odoo-web-testing 及其 OWL-TESTING.md 参考组合。
标签:安装后模块测试默认模式为 from odoo.tests import tagged 与 @tagged("post_install", "-at_install")。参考 ODOO-TESTING-SOP.md(SOP、术语、标签、排错)与 ODOO-TESTING-EXAMPLES.md(可改编测试模式);写测试前追踪行为可组合 odoo-code-tracer,审查测试覆盖或质量可组合 odoo-code-review。资料未提供具体安装命令、收费信息。