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