Odoo使用单元测试对测试模块进行支持。
要编写测试,只需在模块中定义一个tests子包,它将自动检查测试模。测试模块应该有一个以test_开始的名字并且应该从tests/__init__.py导入,例如:
your_module
|-- ...
`-- tests
|-- __init__.py
|-- test_bar.py
`-- test_foo.py
且 __init__.py
包括:
from . import test_foo, test_bar
警告
不从tests/__init__.py导入,测试模块将不会运行
版本8.0中的变化:previously, 以前,测试者只会运行模块添加到两个列表 fast_suite
和在tests/__init__.py
中的checks
。在8.0中,它将运行所有导入模块
测试者将会简单的运行任何测试案例,作为正式单元测试文档的描述,但是Odoo提供了一些工具和测试Odoo内容(主要是模块)相关的帮助内容:
class odoo.tests.common.TransactionCase(methodName='runTest')
测试用例中的每个测试方法是运行在其自己的事务上,并使用自己的游标。每次测试结束后,回滚事务并关闭游标
browse_ref(xid)
为所提供的外部标识符返回记录对象
参数
xid -- 完全限定外部标识符,在表单中module.identifier
中
异常
ValueError 如果没有发现
返回
BaseModel
ref(xid)
返回所提供的外部标识符的数据库ID,get_object_reference的快捷方式
参数
xid -- 完全限定外部标识符,在表单中module.identifier
中
异常
ValueError 如果没有发现
返回
注册的id
class odoo.tests.common.SingleTransactionCase(methodName='runTest')
测试用例中的所有测试方法都是在同一个事务中运行,事务以第一个测试方法开始并在最后一个结束后回滚
browse_ref(xid)
为所提供的外部标识符返回记录对象
参数
xid -- 完全限定外部标识符,在表单中module.identifier
中
异常
ValueError 如果没有发现
返回
BaseModel
ref(xid)
返回所提供的外部标识符的数据库ID,get_object_reference的快捷方式
参数
xid -- 完全限定外部标识符,在表单中module.identifier
中
异常
ValueError 如果没有发现
返回
注册的id
class odoo.tests.common.SavepointCase(methodName='runTest')
类似SingleTransactionCase
所有测试方法运行在一个单一的事务中,但每个测试用例都是运行在一个回滚保存点中(自事务)。
对包含快速测试的测试用例有用,但是对使用重要的数据库设置共有的所有案例 (在数据库测试数据中是复杂的)是无效的: setUpClass()
可用于生成数据库测试数据一次,然后所有测试用例使用相同的数据而不影响彼此,但不必重新创建测试数据
class odoo.tests.common.HttpCase(methodName='runTest')
事务HTTP,使用开发的url和虚构js帮助者的测试用例
browse_ref(xid)
为所提供的外部标识符返回记录对象
参数
xid -- 完全限定外部标识符,在表单中module.identifier
中
异常
ValueError 如果没有发现
返回
BaseModel
phantom_js(url_path, code, ready='window', login=None, timeout=60, **kw)
测试运行在浏览器中的js代码 - 可选的日志作为“登录” - 根据url路径加载页面 - 等待就绪对象可用 - 在页面内容eval(code)
信号成功测试: console.log('ok')
信号失败测试: console.log('error')
如果没有在超时测试失败之前完成
ref(xid)
返回所提供的外部标识符的数据库ID,get_object_reference的快捷方式
参数
xid -- 完全限定外部标识符,在表单中module.identifier
中
异常
ValueError 如果没有发现
返回
注册的id
默认情况下,在安装了相应的模块后,测试就运行一次。测试用例还可以配置为在安装了所有模块之后运行,而不是在模块安装之后运行:
odoo.tests.common.at_install(flag)
设置一个测试的在安装状态,该标志是一个布尔值,指定测试是否应该 (True
)或不应该(False
) 在模块安装期间运行
默认情况下,在安装模块之后,开始安装下一个模块之前运行测试
odoo.tests.common.post_install(flag)
设置测试的后安装状态。该标志是一个布尔值,指定测试是否应该在一组模块安装之后运行。
默认情况下,在安装当前安装集中的所有模块之后,不会运行测试。
最常见的情况是使用TransactionCase
并在每个方法中测试模型的属性:
class TestModelA(common.TransactionCase):
def test_some_action(self):
record = self.env['model.a'].create({'field': 'value'})
record.some_action()
self.assertEqual(
record.field,
expected_field_value)
# other tests...
注
测试方法名必须以test_开始
运行测试测试是自动运行,当安装或更新的模块。如果--test-enable
是启用的,当启动Odoo服务器时。
从Odoo 8是起,在安装/更新周期之外运行测试是不支持的
ps:有翻译不当之处,欢迎留言指正。
原文地址:https://www.odoo.com/documentation/10.0/reference/testing.html