Odoo测试助手
项目描述
odoo-test-helper是用于编写odoo测试的工具箱
加载假模型
有时您构建一个可以由多个模块使用的抽象模块。在这种情况下,如果您想使用真实记录测试它,您需要注册真实模型。
一个解决方案是创建一个带有少量实现的module_test模块,该实现使用您的抽象模型。
另一个解决方案是仅定义测试模型并在测试中加载它们。这个库使得这一点变得可能且简单。
示例
这里有一个测试示例
此示例从文件
实际实现案例可以在以下模块中找到
如何导入
注意导入假类必须以正确的方式进行。导入文件将自动将所有类添加到“module_to_models”变量中。导入必须在工作备份之后进行!
错误方式
from odoo.tests import SavepointCase
from odoo_test_helper import FakeModelLoader
# The fake class is imported here !! It's wrong
# And be carefull even if you only import ResPartner
# all class in the file models will be proceded by odoo
# so no **direct import** of a file that contain fake model
from .models import ResPartner
class TestMixin(SavepointCase):
@classmethod
def setUpClass(cls):
super(TestMixin, cls).setUpClass()
cls.loader = FakeModelLoader(cls.env, cls.__module__)
cls.loader.backup_registry()
cls.loader.update_registry((ResPartner,))
@classmethod
def tearDownClass(cls):
cls.loader.restore_registry()
super(TestMixin, cls).tearDownClass()
def test_create(self):
partner = self.env["res.partner"].create({"name": "BAR", "test_char": "youhou"})
self.assertEqual(partner.name, "FOO-BAR")
self.assertEqual(partner.test_char, "youhou")
正确方式
from odoo.tests import SavepointCase
from odoo_test_helper import FakeModelLoader
class TestMixin(SavepointCase):
@classmethod
def setUpClass(cls):
super(TestMixin, cls).setUpClass()
cls.loader = FakeModelLoader(cls.env, cls.__module__)
cls.loader.backup_registry()
# The fake class is imported here !! After the backup_registry
from .models import ResPartner
cls.loader.update_registry((ResPartner,))
@classmethod
def tearDownClass(cls):
cls.loader.restore_registry()
super(TestMixin, cls).tearDownClass()
def test_create(self):
partner = self.env["res.partner"].create({"name": "BAR", "test_char": "youhou"})
self.assertEqual(partner.name, "FOO-BAR")
self.assertEqual(partner.test_char, "youhou")
贡献者
塞巴斯蒂安·贝奥 <sebastien.beau@akretion.com>
劳伦特·米尼奥 <laurent.mignon@acsone.eu>
西蒙内·奥尔西 <simone.orsi@camptocamp.com>
历史
本模块受到以下混合代码的启发,该代码可在OCA和shopinvader仓库中找到
Shopinvader中的混合: https://github.com/shopinvader/odoo-shopinvader/blob/b81b921ea52c911e5b33afac88adb8f9a1c02626/base_url/tests/models_mixin.py
初始作者为
劳伦特·米尼奥 <laurent.mignon@acsone.eu>
西蒙内·奥尔西 <simone.orsi@camptocamp.com>
重构/提取由以下人员完成
塞巴斯蒂安·贝奥 <sebastien.beau@akretion.com>
此重构尝试正确加载所有类,就像Odoo使用完全相同的语法一样
请注意,此重构/提取是为了修复以下问题的测试
更改
2.1.1
[修复] FakeModelLoader:在restore_registry()中避免重新加载模块(Odoo 15.0+)[修复] 确保在无模型的附加组件中清理注册表
2.1.0
[改进] 允许忽略Odoo核心模块以避免警告
2.0.5
添加.gitignore
2.0.4
[修复] Odoo 15+中的AttributeError,2.0.3中引入的回归
2.0.3
[修复] Odoo 16中的restore_registry
此新属性是基类的事实来源,在setup_models(在PR中修改的代码中稍后调用)中,模型的基础类从它重置
此PR修复的测试失败可以在以下位置检查 https://app.travis-ci.com/github/OCA/odoo-test-helper/builds/258453331
2.0.2
修复v15的mock导入
2.0.1
修复对Odoo 15.0的支持
2.0.0
迁移到OCA
重新许可为LGPL
1.1.0
重构(杂项改进/修复)
1.0.0
初始发布