在專案開發過程中,隨著模組與功能逐漸增多,系統的穩定性與可靠性就變得至關重要。Odoo 本身內建了完整的 測試框架,支援 單元測試 (Unit Test) 與 整合測試 (Integration Test),讓開發者能在開發階段就驗證程式邏輯是否正確,避免部署後出現重大錯誤。
Odoo 的測試基於 Python 的 unittest
,並結合 Odoo 的 ORM 與模組環境。
TransactionCase
或 SavepointCase
。tests/
資料夾。odoo-bin
啟動測試,或透過 CI 工具自動執行。單元測試專注於「單一功能」是否正確。
範例:測試書籍建立功能 (tests/test_library_book.py
)
from odoo.tests.common import TransactionCase
class TestLibraryBook(TransactionCase):
def test_create_book(self):
book = self.env['library.book'].create({
'name': 'Odoo Basics',
'author': 'Tom'
})
self.assertEqual(book.name, 'Odoo Basics')
self.assertEqual(book.author, 'Tom')
執行測試:
./odoo-bin -c odoo.conf -d mydb --test-enable --stop-after-init -i library
整合測試用來驗證「多個模組與流程」是否能協同工作。
範例:測試借書流程
from odoo.tests.common import SavepointCase
class TestLibraryFlow(SavepointCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.book = cls.env['library.book'].create({'name': 'Odoo Advanced'})
cls.member = cls.env['library.member'].create({'name': 'Alice'})
def test_borrow_book(self):
self.book.member_id = self.member.id
self.assertEqual(self.book.member_id.name, 'Alice')
這段測試會檢查「借書流程」是否正確關聯會員與書籍。
Odoo 測試可以搭配 demo
資料使用,模擬真實環境。
TransactionCase
:每次測試會回滾交易,保證資料不污染。SavepointCase
:比 TransactionCase
效率更高,適合大規模測試。在實務專案中,建議將測試整合進 GitHub Actions、GitLab CI 或 Jenkins:
Odoo 測試框架讓開發者能:
unittest
搭配 ORM 驗證邏輯。在下一篇文章中,我將介紹 Odoo 性能優化與 Scalability(效能與擴展性),探討如何讓 Odoo 在大型專案中依舊保持高效。