This page looks best with JavaScript enabled

Cách viết test case trong Odoo

 ·  ☕ 4 phút đọc · 👀... views

Kiểm thử phần mềm là quá trình triển khai một chương trình hoặc ứng dụng để phát hiện lỗi phần mềm. Nó cho phép nhà phát triển xác thực và kiểm tra chương trình phần mềm.

Odoo hỗ trợ test các module với thư viện UnitTest trong Python. Test case trong Odoo rất dễ để có thể viết và sử dụng. Đây là một tính năng khác tuyệt vời nếu bạn đang viết nhiều phần custom code của Odoo Core và bạn muốn có một cái nhìn tổng quan về các chức năng mà mình đang phát triển cũng như các tính năng mà core Odoo đang có.
Viết test case và debug theo mình nghĩ là 2 trong những công việc quan trọng mà 1 dev phải có. Có một số lý do khác mà bạn phải viết test case là :

  • Chắc chắn rằng code của bạn sẽ không hoạt động trong tương lai với những trường hợp đặc biệt về phía thao tác người dùng cũng như dữ liệu
  • Đưa ví dụ về các trường hợp
  • Giúp bạn hình dung ra việc của bạn cần làm trước khi bắt tay vào code
Trong bài viết lần này mình sẽ viết một test case trên Odoo 15
Chạy test case như thế nào?

Trước khi viết một test case chúng ta hãy cùng xem chạy chúng như thế nào? Chúng ta sẽ thêm tham số –test-enable -c {config path file}
Ví dụ: ./odoo-bin -i automated_test_demo –test-enable -c /odoo.conf

Viết một test case

Để viết test case, bạn cần xác định module cần test, module test cần phải có tên bắt đầu bằng test_

file init.py bao gồm:

from . import test_function1, test_function2

Khi code test case trong Odoo, chúng ta cần lưu ý những điều sau:

  • Tất cả các model test phải được kế từa từ Odoo action class
  • Tất cả các model test phải được viết trong file init.py
  • Tất cả các file model test phải được bắt đầu bằng test_name.py
  • Tất cả các hàm, phương thức nên được đặt tên như def test_name(self):
  • Module test phải được đặt ở trong module bạn cần test
Tạo class test case

Để viết test case, Odoo có một số lớp thử nghiệm được xác định trước. Nếu bạn cần sử dụng và mở rộng chúng

odoo.tests.common.TransactionCase

Đây là class được sử dụng nhiều nhất, thường được dùng trong việc quản lý từng transaction

odoo.tests.common.SingleTransactionCase

Chạy tất cả các class test trong

odoo.tests.common.HttpCase
odoo.tests.common.SavepointCase

Dưới đây là một class:

from odoo.tests import common
class TestModuleDemo(common.TransactionCase):
    def setUp(self):
        super(TestModuleDemo, self).setUp()
        # Add test setUp code here
    def test_some_action(self):
        # Add test code here

Phương thức setup() tạo dữ liệu và biến mà chúng ta muốn sử dụng, phương thức này là phương thức trong thư viện unittest.

Sau đây mình sẽ viết một đoạn code cho hàm test như sau:

def test_some_action(self):
        # add a record in a model.
        record = self.env['model.a'].create({'field': 'value'})
        record.some_action()
        # Check if the field and match the expected result
        self.assertEqual(record.field, 'expected_field_value')
        print('Your test was successful!')

Trong odoo thì có 3 loại test chính

  • Python unit tests
  • JS unit tests
  • Tour: phần này đảm bảo việc code python(backend) và code js(front end) giao tiếp đúng với nhau

Mình sẽ sửa đoạn code phần unit test lại như sau:

from odoo.tests import common
from addons_custom.module_test.models import string


class TestModuleDemo(common.TransactionCase):
    def setUp(self):
        super(TestModuleDemo, self).setUp()
        self.test_some_action()
        # Add test setUp code here

    def test_some_action(self):
        record = self.env['module_test.module_test'].create({'name': 'value'})
        self.test_string_should_do_nothing_when_less_than()
        self.test_string_should_do_nothing_when_same_size()
        self.test_string_should_truncate_when_greater()
        print('Your test was successful!')

    def test_string_should_truncate_when_greater(self):
        self.assertEqual(len(string.limit('A short string...', size=5)), 5)

    def test_string_should_do_nothing_when_same_size(self):
        sample_str = 'This is my sample string.'
        sample_str_len = len(sample_str)
        self.assertEqual(len(string.limit(sample_str, sample_str_len)), sample_str_len)

    def test_string_should_do_nothing_when_less_than(self):
        sample_str = 'Another cool sample string!'
        sample_str_len = len(sample_str)
        self.assertEqual(len(string.limit(sample_str, sample_str_len)), sample_str_len)

Và đây là kết quả

Như để có được kết quả trên mình đã chạy câu lệnh như sau:

odoo-bin -c /home/zyn1030z/PycharmProjects/erpviet-main/odoo.conf -d erpviet --test-enable -i module_test 

Bạn cũng có thể tùy chọn –stop-after-init

Bài viết lần này dừng lại ở đây, ở bài viết tới chúng ta cùng tìm hiểu về cách viết unit test trong JS của Odoo nhé!😄

Chia sẻ
Support the author with

Hùng Phạm
Viết bởi
Hùng Phạm
Web/Mobile Developer