Kiểm tra đơn vị có nghĩa là gì trong Python?

Hướng dẫn này sẽ hướng dẫn bạn cách viết bài kiểm tra đơn vị cho các hàm Python. Nhưng tại sao bạn nên xem xét việc viết bài kiểm tra đơn vị?

Chà, khi làm việc trong một dự án lớn, bạn sẽ thường phải cập nhật một số mô-đun nhất định và mã tái cấu trúc khi cần thiết. Nhưng những thay đổi như vậy có thể gây ra hậu quả ngoài ý muốn đối với các mô-đun khác sử dụng mô-đun được cập nhật bên trong chúng. Điều này đôi khi có thể phá vỡ chức năng hiện có

Là nhà phát triển, bạn nên kiểm tra mã của mình để đảm bảo rằng tất cả các mô-đun trong ứng dụng đều hoạt động như dự kiến. Kiểm tra đơn vị cho phép bạn kiểm tra xem các đơn vị mã nhỏ bị cô lập có hoạt động chính xác hay không và cho phép bạn khắc phục sự không nhất quán phát sinh từ các bản cập nhật và tái cấu trúc

Hướng dẫn này sẽ giúp bạn bắt đầu thử nghiệm đơn vị trong Python. Bạn sẽ học cách sử dụng mô-đun

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
2 tích hợp sẵn của Python để thiết lập và chạy các bài kiểm tra đơn vị cũng như viết các trường hợp kiểm tra để kiểm tra các chức năng của Python. Bạn cũng sẽ học cách kiểm tra các chức năng đưa ra ngoại lệ

Bắt đầu nào

Thử nghiệm bằng Python – Những bước đầu tiên

Chúng ta sẽ bắt đầu bằng cách định nghĩa một hàm Python và viết các bài kiểm tra đơn vị để kiểm tra xem nó có hoạt động như mong đợi không. Để tập trung vào cách thiết lập các bài kiểm tra đơn vị, chúng ta sẽ xem xét một hàm đơn giản

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3, hàm này nhận vào một số và kiểm tra xem đó có phải là số nguyên tố hay không

import math

def is_prime[num]:
    '''Check if num is prime or not.'''
    for i in range[2,int[math.sqrt[num]]+1]:
        if num%i==0:
            return False
    return True

Hãy bắt đầu một REPL Python, gọi hàm

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3 với các đối số và xác minh kết quả

>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True

Bạn cũng có thể sử dụng câu lệnh

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
5 để xác minh rằng
# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3 trả về giá trị Boolean dự kiến, như minh họa ở trên. Nếu giá trị trả về từ hàm khác với giá trị Boolean dự kiến, thì một
# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
7 sẽ xuất hiện

Loại thử nghiệm thủ công này không hiệu quả khi bạn muốn kiểm tra toàn diện chức năng của mình để tìm danh sách đối số lớn hơn nhiều. Bạn có thể muốn thiết lập thử nghiệm tự động để chạy và xác thực đầu ra của chức năng đối với các trường hợp thử nghiệm được xác định trong bộ thử nghiệm

Cách sử dụng Mô-đun
# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
2 của Python

Python đi kèm với mô-đun

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
2 cho phép bạn định cấu hình các bài kiểm tra tự động cho các chức năng và lớp trong ứng dụng của bạn. Quy trình chung để thiết lập các bài kiểm tra đơn vị trong Python như sau

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test

Đoạn mã trên

$ python -m unittest .py
0 thực hiện như sau

  • Nhập mô-đun
    # .py
    
    import unittest
    from  import 
    # all entries within  are placeholders
    
    class TestClass[unittest.TestCase]:
    	def test_[self]:
    		# check function_to_test
    
    	def test_[self]:
    		# check function_to_test
    	:
    	:
    	:
    
    	def test_[self]:
    		# check function_to_test
    
    2 tích hợp sẵn của Python
  • Nhập hàm Python để kiểm tra,
    $ python -m unittest .py
    2 từ mô-đun mà nó được xác định,
    $ python -m unittest .py
    3
  • Tạo một lớp kiểm tra [
    $ python -m unittest .py
    4] kế thừa từ lớp
    $ python -m unittest .py
    5
  • Mỗi bài kiểm tra sẽ được chạy phải được định nghĩa là các phương thức bên trong lớp kiểm tra
  • 💡 Lưu ý. Để mô-đun
    # .py
    
    import unittest
    from  import 
    # all entries within  are placeholders
    
    class TestClass[unittest.TestCase]:
    	def test_[self]:
    		# check function_to_test
    
    	def test_[self]:
    		# check function_to_test
    	:
    	:
    	:
    
    	def test_[self]:
    		# check function_to_test
    
    2 xác định các phương pháp này dưới dạng thử nghiệm và chạy chúng, tên của các phương pháp này phải bắt đầu bằng
    $ python -m unittest .py
    7
  • Lớp
    $ python -m unittest .py
    8 trong mô-đun
    # .py
    
    import unittest
    from  import 
    # all entries within  are placeholders
    
    class TestClass[unittest.TestCase]:
    	def test_[self]:
    		# check function_to_test
    
    	def test_[self]:
    		# check function_to_test
    	:
    	:
    	:
    
    	def test_[self]:
    		# check function_to_test
    
    2 cung cấp các phương thức khẳng định hữu ích để kiểm tra xem hàm được kiểm tra có trả về các giá trị mong đợi hay không

Các phương thức xác nhận phổ biến nhất được liệt kê bên dưới và chúng tôi sẽ sử dụng một số trong số chúng trong hướng dẫn này

Phương phápMô tả
if __name__=='__main__':
	unittest.main[]
0Khẳng định rằng
if __name__=='__main__':
	unittest.main[]
1
if __name__=='__main__':
	unittest.main[]
2Khẳng định rằng
if __name__=='__main__':
	unittest.main[]
3 là
if __name__=='__main__':
	unittest.main[]
4
if __name__=='__main__':
	unittest.main[]
5Khẳng định rằng
if __name__=='__main__':
	unittest.main[]
3 là
if __name__=='__main__':
	unittest.main[]
7
if __name__=='__main__':
	unittest.main[]
8Khẳng định rằng
if __name__=='__main__':
	unittest.main[]
9 làm tăng
$ python .py
0

📑 Để biết danh sách đầy đủ các phương thức xác nhận, hãy tham khảo tài liệu unittest

Để chạy các bài kiểm tra này, chúng ta nên chạy unittest làm mô-đun chính, sử dụng lệnh sau

$ python -m unittest .py

Chúng ta có thể thêm điều kiện

$ python .py
1 để chạy
# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
2 làm mô-đun chính

if __name__=='__main__':
	unittest.main[]

Việc thêm điều kiện ở trên sẽ cho phép chúng tôi chạy thử nghiệm bằng cách chạy trực tiếp mô-đun Python chứa các thử nghiệm

$ python .py

Cách xác định các trường hợp thử nghiệm cho các hàm Python


Trong phần này, chúng ta sẽ viết các bài kiểm tra đơn vị cho hàm

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3 bằng cách sử dụng cú pháp mà chúng ta đã học

Để kiểm tra hàm
# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3 trả về Boolean, chúng ta có thể sử dụng các phương thức
$ python .py
5 và
$ python .py
6. Chúng ta định nghĩa bốn phương thức kiểm tra trong lớp
$ python .py
7 kế thừa từ lớp
$ python -m unittest .py
5

import unittest
# import the is_prime function
from prime_number import is_prime
class TestPrime[unittest.TestCase]:
    def test_two[self]:
        self.assertTrue[is_prime[2]]
    def test_five[self]:
    	self.assertTrue[is_prime[5]]
    def test_nine[self]:
    	self.assertFalse[is_prime[9]]
    def test_eleven[self]:
    	self.assertTrue[is_prime[11]]
if __name__=='__main__':
	unittest.main[]
$ python test_prime.py

Trong đầu ra bên dưới, '. ' chỉ ra một thử nghiệm thành công

Output
....
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK

Trong đoạn mã trên, có bốn phương pháp kiểm tra, mỗi phương pháp kiểm tra một đầu vào cụ thể. Thay vào đó, bạn có thể xác định một phương thức kiểm tra duy nhất để xác nhận xem đầu ra có đúng không, cho cả bốn đầu vào

import unittest
from prime_number import is_prime
class TestPrime[unittest.TestCase]:
	def test_prime_not_prime[self]:
        self.assertTrue[is_prime[2]]
        self.assertTrue[is_prime[5]]
        self.assertFalse[is_prime[9]]
        self.assertTrue[is_prime[11]]

Khi chạy mô-đun

$ python .py
9, chúng tôi thấy rằng một thử nghiệm đã được chạy thành công. Nếu bất kỳ phương thức xác nhận nào đưa ra kết quả
# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
7, thì thử nghiệm không thành công

$ python test_prime.py
>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True
1

Cách viết bài kiểm tra đơn vị để kiểm tra ngoại lệ

Trong phần trước, chúng ta đã thử nghiệm hàm

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3 với đầu vào là các số nguyên tố và không nguyên tố. Cụ thể, các đầu vào đều là số nguyên dương

Chúng tôi vẫn chưa thực thi rằng các đối số trong lệnh gọi hàm tới

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3 phải là số nguyên dương. Bạn có thể sử dụng gợi ý loại để thực thi các loại hoặc đưa ra ngoại lệ cho các đầu vào không hợp lệ

Khi thử nghiệm chức năng

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3, chúng tôi chưa tính đến những điều sau

  • Đối với một đối số dấu phẩy động, hàm
    # .py
    
    import unittest
    from  import 
    # all entries within  are placeholders
    
    class TestClass[unittest.TestCase]:
    	def test_[self]:
    		# check function_to_test
    
    	def test_[self]:
    		# check function_to_test
    	:
    	:
    	:
    
    	def test_[self]:
    		# check function_to_test
    
    3 sẽ vẫn chạy và trả về
    if __name__=='__main__':
    	unittest.main[]
    4 hoặc
    if __name__=='__main__':
    	unittest.main[]
    7, điều này không chính xác
  • Đối với các đối số thuộc các loại khác, chẳng hạn, chuỗi 'năm' thay vì số 5, hàm sẽ đưa ra TypeError
  • Nếu đối số là một số nguyên âm, thì hàm
    import unittest
    # import the is_prime function
    from prime_number import is_prime
    class TestPrime[unittest.TestCase]:
        def test_two[self]:
            self.assertTrue[is_prime[2]]
        def test_five[self]:
        	self.assertTrue[is_prime[5]]
        def test_nine[self]:
        	self.assertFalse[is_prime[9]]
        def test_eleven[self]:
        	self.assertTrue[is_prime[11]]
    if __name__=='__main__':
    	unittest.main[]
    7 sẽ đưa ra lỗi ValueError. Bình phương của mọi số thực [dương, âm hoặc 0] luôn không âm. Vì vậy, căn bậc hai chỉ được xác định cho các số không âm

Hãy xác minh những điều trên bằng cách chạy một số ví dụ trong Python REPL

>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True
2

Cách tăng ngoại lệ cho đầu vào không hợp lệ

Để giải quyết vấn đề trên, chúng tôi sẽ xác thực giá trị được sử dụng trong lệnh gọi hàm cho

import unittest
# import the is_prime function
from prime_number import is_prime
class TestPrime[unittest.TestCase]:
    def test_two[self]:
        self.assertTrue[is_prime[2]]
    def test_five[self]:
    	self.assertTrue[is_prime[5]]
    def test_nine[self]:
    	self.assertFalse[is_prime[9]]
    def test_eleven[self]:
    	self.assertTrue[is_prime[11]]
if __name__=='__main__':
	unittest.main[]
8 và đưa ra các ngoại lệ nếu cần

  • Kiểm tra xem
    import unittest
    # import the is_prime function
    from prime_number import is_prime
    class TestPrime[unittest.TestCase]:
        def test_two[self]:
            self.assertTrue[is_prime[2]]
        def test_five[self]:
        	self.assertTrue[is_prime[5]]
        def test_nine[self]:
        	self.assertFalse[is_prime[9]]
        def test_eleven[self]:
        	self.assertTrue[is_prime[11]]
    if __name__=='__main__':
    	unittest.main[]
    8 có phải là số nguyên không. Nếu có, tiến hành kiểm tra tiếp theo. Khác, đưa ra một ngoại lệ
    $ python test_prime.py
    0
  • Kiểm tra xem
    import unittest
    # import the is_prime function
    from prime_number import is_prime
    class TestPrime[unittest.TestCase]:
        def test_two[self]:
            self.assertTrue[is_prime[2]]
        def test_five[self]:
        	self.assertTrue[is_prime[5]]
        def test_nine[self]:
        	self.assertFalse[is_prime[9]]
        def test_eleven[self]:
        	self.assertTrue[is_prime[11]]
    if __name__=='__main__':
    	unittest.main[]
    8 có phải là số nguyên âm không. Nếu có, hãy đưa ra một ngoại lệ
    $ python test_prime.py
    2

Sửa đổi định nghĩa hàm để xác thực đầu vào và đưa ra các ngoại lệ, chúng tôi có

>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True
3

Bây giờ chúng ta đã sửa đổi chức năng để tăng ValueError và TypeError đối với các đầu vào không hợp lệ, bước tiếp theo là kiểm tra xem các ngoại lệ này có tăng không

Cách sử dụng Phương pháp
$ python test_prime.py
3 để kiểm tra ngoại lệ

Trong định nghĩa của lớp

$ python .py
7, hãy thêm các phương thức để kiểm tra xem các ngoại lệ có được đưa ra hay không

Chúng tôi xác định các phương pháp

$ python test_prime.py
5 và
$ python test_prime.py
6 để kiểm tra xem ngoại lệ
$ python test_prime.py
0 có được đưa ra hay không và phương pháp
$ python test_prime.py
8 để kiểm tra xem ngoại lệ
$ python test_prime.py
2 có được đưa ra hay không

📌 Để gọi phương thức

$ python test_prime.py
3, chúng ta có thể sử dụng cú pháp tổng quát sau

>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True
4

Chúng tôi cũng có thể sử dụng cú pháp sau bằng trình quản lý ngữ cảnh [chúng tôi sẽ sử dụng cú pháp này trong ví dụ này]

>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True
5

Thêm các phương pháp kiểm tra để kiểm tra các ngoại lệ, chúng tôi có

>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True
6

Hãy chạy mô-đun

$ python .py
9 và quan sát đầu ra

$ python test_prime.py
>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True
8

Trong các ví dụ chúng tôi đã mã hóa cho đến nay, tất cả các thử nghiệm đều thành công. Hãy sửa đổi một trong các phương thức, chẳng hạn,

$ python test_prime.py
6, thành như sau

>>> from prime_number import is_prime
>>> is_prime[3]
True
>>> is_prime[5]
True
>>> is_prime[12]
False
>>> is_prime[8]
False
>>> assert is_prime[7] == True
9

Chúng tôi gọi hàm

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
3 với số 5 là đối số. Ở đây, 5 là đầu vào hợp lệ mà hàm trả về
if __name__=='__main__':
	unittest.main[]
4. Do đó, chức năng không tăng một
$ python test_prime.py
0. Khi chúng tôi chạy lại các bài kiểm tra, chúng tôi sẽ thấy rằng có một bài kiểm tra không thành công

$ python test_prime.py
# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
1

Phần kết luận

Cảm ơn bạn đã đọc đến đây. 😄 Tôi hy vọng hướng dẫn này đã giúp bạn hiểu những kiến ​​thức cơ bản về kiểm thử đơn vị trong Python

Bạn đã học cách thiết lập các bài kiểm tra để kiểm tra xem một chức năng có hoạt động như mong đợi hay đưa ra một ngoại lệ hay không—tất cả đều sử dụng mô-đun

# .py

import unittest
from  import 
# all entries within  are placeholders

class TestClass[unittest.TestCase]:
	def test_[self]:
		# check function_to_test

	def test_[self]:
		# check function_to_test
	:
	:
	:

	def test_[self]:
		# check function_to_test
2 tích hợp sẵn của Python

Tiếp tục mã hóa và hẹn gặp lại bạn trong hướng dẫn tiếp theo. 👩🏽‍💻

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

Bala Priya C

Tôi là một nhà phát triển và nhà văn kỹ thuật đến từ Ấn Độ. Tôi viết hướng dẫn về mọi thứ liên quan đến lập trình và máy học

Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Ý nghĩa của bài kiểm tra đơn vị là gì?

Kiểm tra đơn vị là một cách kiểm tra đơn vị - đoạn mã nhỏ nhất có thể được tách biệt một cách logic trong hệ thống . Trong hầu hết các ngôn ngữ lập trình, đó là hàm, chương trình con, phương thức hoặc thuộc tính. Phần biệt lập của định nghĩa là quan trọng.

Tại sao viết bài kiểm tra đơn vị Python?

Mục tiêu của thử nghiệm đơn vị python là để phát hiện càng nhiều lỗi và sự không nhất quán trong giai đoạn phát triển ứng dụng sơ khai càng tốt . Điều này đạt được bằng cách thiết kế và viết kịch bản các bài kiểm tra đơn vị chất lượng và chính xác cũng có thể dùng làm tài liệu chi tiết cho quy trình phát triển.

Kiểm tra đơn vị với ví dụ là gì?

Kiểm tra đơn vị là gì? . Nó được thực hiện trong giai đoạn mã hóa bởi các nhà phát triển. Để thực hiện kiểm tra đơn vị, nhà phát triển viết một đoạn mã [kiểm tra đơn vị] để xác minh mã được kiểm tra [đơn vị] là chính xác. testing the smallest testable unit of an application. It is done during the coding phase by the developers. To perform unit testing, a developer writes a piece of code [unit tests] to verify the code to be tested [unit] is correct.

Một bài kiểm tra đơn vị cho mã là gì?

Trong lập trình máy tính, kiểm thử đơn vị là một phương pháp kiểm thử phần mềm theo đó các đơn vị mã nguồn riêng lẻ—tập hợp một hoặc nhiều mô-đun chương trình máy tính cùng với dữ liệu điều khiển liên quan, quy trình sử dụng và quy trình vận hành—được kiểm tra để xác định xem chúng có phù hợp để sử dụng hay không

Chủ Đề