You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试Odoo中未继承Model的自定义类?

测试Odoo非模型自定义类的可行方案

方案一:纯单元测试(unittest.TestCase)

  • 解决导入问题:确保测试文件和自定义类的导入路径正确。比如自定义类在your_module/xml_generator.py,测试文件在your_module/tests/test_xml_gen.py,用相对导入:from ..xml_generator import InvoiceXMLGenerator;如果是外部调用,用绝对导入from odoo.addons.your_module.xml_generator import ...。
  • 模拟依赖数据:如果类需要处理发票数据,不要直接依赖Odoo的ORM记录,手动构造模拟数据(字典或简单类实例),包含生成XML所需的字段即可。
  • 示例代码:
import unittest
from ..xml_generator import InvoiceXMLGenerator

class TestInvoiceXMLGen(unittest.TestCase):
    def setUp(self):
        # 构造模拟发票数据
        self.mock_invoice = {
            'name': 'INV/2024/0001',
            'amount_total': 150.50,
            'partner': {'name': 'ABC Corp', 'vat': '987654321'},
            'lines': [{'product': 'Service X', 'price': 150.50, 'qty': 1}]
        }
        self.generator = InvoiceXMLGenerator()

    def test_xml_content(self):
        xml_result = self.generator.generate(self.mock_invoice)
        # 验证关键节点存在
        self.assertIn('<invoice_number>INV/2024/0001</invoice_number>', xml_result)
        self.assertIn('<total>150.50</total>', xml_result)

方案二:轻量Odoo环境(BaseCase)

如果你的类需要用到Odoo的核心工具(比如货币格式化、本地化处理),但不需要完整的数据库事务,用odoo.tests.common.BaseCase替代TransactionCase——它不会初始化模型事务,避免RuntimeError/TypeError:

  • 示例代码:
from odoo.tests.common import BaseCase
from odoo.addons.your_module.xml_generator import InvoiceXMLGenerator

class TestInvoiceXMLGen(BaseCase):
    def setUp(self):
        super().setUp()
        # 可以直接使用Odoo的环境对象调用基础工具
        self.eur_currency = self.env.ref('base.EUR')
        self.generator = InvoiceXMLGenerator(currency=self.eur_currency)

    def test_amount_format(self):
        formatted = self.generator.format_amount(200.0)
        self.assertEqual(formatted, '200,00 €')

报错原因说明

  • 使用TransactionCase报错:因为它会自动创建Odoo模型的事务上下文,你的类不属于Odoo模型,会触发ORM初始化相关的错误,完全不适合这类测试。
  • unittest导入报错:检查测试文件是否放在模块的tests目录下,且tests/__init__.py中正确导入了测试模块;同时确认自定义类所在的模块在根__init__.py中已导出。

内容的提问来源于stack exchange,提问作者Juan Luis Andián Tápiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:46:19