天天看點

odoo10參考系列--測試子產品

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

繼續閱讀