Skip to content

Latest commit

 

History

History
184 lines (119 loc) · 6.46 KB

TESTING.rst

File metadata and controls

184 lines (119 loc) · 6.46 KB

Testing CAL

Testing framework

Cần lưu ý, Test framework trong CAL chỉ là Unit tests, chứ không phải Testing-Driven Developement - TDD, vì vậy sẽ chỉ viết test sau khi thiết kế và hoàn thành việc code chức năng.

Unit Tests

Quá trình phát triển

Cấu trúc cây thư mục Unit Test

Cấu trúc cây thư mục Unit Test nên tương ứng với cấu trúc cây thư mục code cần test, và có thêm tiền tố 'test_' ví dụ:

- target module: cal.wsgi

- test.module: cal.tests.unit.test_wsgi

Cấu trúc thư mục tests/:

├── base.py
├── __init__.py
├── fixtures.py
└── unit
        ├── conf_fixtures.py
        ├── drivers
        ├── __init__.py
        ├── resources
        │   ├── compute
        │   │   └── __init__.py
        │   ├── file_fixtures.py
        │   ├── __init__.py
        │   ├── network
        │   │   └── __init__.py
        │   ├── storage
        │   │   └── __init__.py
        │   └── test_file_fixtures.py
        ├── test_conf_fixtures.py
        ├── test_connection.py
        └── test_wsgi.py

Trong đó:

  • base.py: chứa các test utility và base TestCase, các lớp trong unit/ sẽ kết thừa lớp base TestCase này.
  • fixtures.py: chứa các Fixture cơ bản được sử dụng cho TestCase.
  • test_connection.py: kiểm tra việc kết nối các cloud provider.(tùy chọn)

Cách viết testcase

Lưu ý:

  1. mock: mock đơn giản là thay thế 1 đối tượng/lớp/phương thức bằng 1 đối tượng mock, và kiểm tra xem cách thức sử dụng, hoạt động của đối tượng đấy. Có thể định nghĩa mock object theo những cách sau - gọi là các mock styles:
  • The nested context manager.
  • Decorating the method or the class
  • Mock/patcher objects

Sau khi định nghĩa được các mock object, cần lưu ý đến hai attribute quan trọng sau:

  • side_effect: attribute này sẽ giúp xác định behavior cho mock object. bằng việc raise những ngoại lệ Exception mong muốn hoặc hỗ trợ trả về nhiều hơn 1 kết quả iterable khi mock object được gọi.

  • return_value: attribute định nghĩa kết quả được trả về khi mock object được gọi.

    Chi tiết tham khảo thêm SlideDocs

  1. Phương thức stub_out(old_func, new_func) cho phép việc thay thế sử dụng 1 phương thức/hàm bằng 1 phương thức/hàm khác Lấy ví dụ 1 trường hợp sử dụng trong test case của Openstack Nova:

    self.stub_out('os.chmod', lambda *a, **kw: None)
  2. Về class skipIf() trong base.py, sẽ được sử dụng dưới dạng decorator khi muốn bỏ qua 1 phương thức test với điều kiện cho trước.

  3. Cách viết 1 test case:

from cal.tests import base

class TestSomeThing(base.TestCase):

        # Chuẩn bị môi trường cho việc test,
        # thích hợp trong các trường hợp có
        # những đoạn code lặp lại để chuẩn bị.
        def setUp(self):
                super(TestCase, self).setUp()
                self.api = your_wsgi_app # default: falcon.API()

        def test_method_one_case_one(self):
                pass

        def test_method_one_case_two(self):
                pass

        # Kết thúc việc test.
        def tearDown(self):
                pass

5. Ở unittest này, chúng ta sẽ sử dụng falcon.testing.TestCase, trong đó, sẽ có một số phương thức dùng để giả lập request như simulate_get, simulate_post,... Những phương thức này sẽ trả về một đối tượng của class Result.

Mọi thông tin thêm xem ở link falcon.testing.TestCase và ví dụ cal/tests/unit/test_wsgi.py
  1. KHÔNG SỬ DỤNG MOX!

Chạy Unit Test

Dùng tox

CAL sử dụng tox để quản lý môi trường ảo nhằm phục vụ cho việc chạy test cases. Nó sử dụng Testr để quản lý việc chạy các test cases.

Tox xử lý việc tạo ra 1 loạt virtualenvs.

Testr xử lý việc thực hiện song song một loạt các test cases cũng như tracking các long-running tests.

Để chạy unit tests, khi này sẽ chạy 3 env py34, py27, pep8:

tox

Nếu muốn test từng env có thể chạy, với env là py27, py34, pep8, cover:

tox -e <env>

Lưu ý: Khi chạy nếu py34 fail và xuất hiện lỗi db type could not be determined, xóa thư mục .testrepository và chạy lại lần nữa.

Thông tin chi tiết có thể tham khảo tại trang wiki:

https://wiki.openstack.org/wiki/Testr

Tài liệu tham khảo

  1. Note về unittest.