国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python 單元測試:八個單元測試框架的使用方法

開發
本文將介紹幾種常見的 Python 單元測試框架,并通過實際例子幫助讀者更好地理解和使用它們。

單元測試是軟件開發中不可或缺的一部分,它能夠幫助開發者確保代碼的質量和穩定性。Python 社區提供了多種單元測試框架,每種框架都有其獨特的優勢和適用場景。本文將介紹幾種常見的 Python 單元測試框架,并通過實際例子幫助讀者更好地理解和使用它們。

1. unittest 模塊

unittest 是 Python 自帶的標準庫之一,它基于 Java 的 JUnit 框架設計,提供了一套完整的單元測試框架。

基本用法:

import unittest

class TestStringMethods(unittest.TestCase):
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

if __name__ == '__main__':
    unittest.main()
  • 這段代碼定義了一個測試類 TestStringMethods,繼承自 unittest.TestCase。
  • test_upper 和 test_isupper 方法分別測試字符串的大寫轉換和是否全為大寫的檢查。
  • unittest.main() 啟動測試運行器。

進階用法:

import unittest

class TestStringMethods(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("這個方法只在所有測試開始前執行一次")

    def setUp(self):
        print("這個方法會在每個測試方法之前執行")
        self.test_string = "hello world"

    def test_upper(self):
        self.assertEqual(self.test_string.upper(), 'HELLO WORLD')

    def test_isupper(self):
        self.assertTrue('HELLO'.isupper())
        self.assertFalse('Hello'.isupper())

    def tearDown(self):
        print("這個方法會在每個測試方法之后執行")
        del self.test_string

    @classmethod
    def tearDownClass(cls):
        print("這個方法在所有測試結束后執行一次")

if __name__ == '__main__':
    unittest.main()
  • setUpClass 類方法在整個測試類開始前執行一次。
  • setUp 方法在每個測試方法前執行,用于準備測試數據。
  • tearDown 方法在每個測試方法后執行,用于清理測試環境。
  • tearDownClass 類方法在所有測試結束后執行一次。

2. pytest 框架

pytest 是目前非常流行的一個第三方單元測試框架,它簡潔易用,擴展性強。

基本用法:

def test_upper():
    assert 'foo'.upper() == 'FOO'

def test_isupper():
    assert 'FOO'.isupper()
    assert not 'Foo'.isupper()
  • 使用 assert 斷言來驗證期望的結果。
  • 直接定義函數名以 test_ 開頭的方法作為測試用例。

進階用法:

import pytest

@pytest.fixture
def setup_data():
    print("setup data")
    return "hello world"

def test_upper(setup_data):
    assert setup_data.upper() == "HELLO WORLD"

def test_isupper():
    assert 'HELLO'.isupper()
    assert not 'Hello'.isupper()

def test_fixture_teardown(setup_data):
    print("teardown data")
  • @pytest.fixture 裝飾器定義了一個測試夾具(fixture),可以在多個測試用例之間共享數據。
  • setup_data 函數會在 test_upper 和 test_fixture_teardown 方法之前執行。

3. Pytest-cov

pytest-cov 是一個用于生成代碼覆蓋率報告的插件,它可以與 pytest 配合使用。

安裝:

pip install pytest-cov

基本用法:

def add(a, b):
    return a + b

def test_add():
    assert add(1, 2) == 3

def test_add_negative():
    assert add(-1, -1) == -2

定義一個簡單的 add 函數和兩個測試用例。

運行測試并生成覆蓋率報告:

pytest --cov=my_module

--cov=my_module 參數指定要生成覆蓋率報告的模塊。

輸出示例:

============================= test session starts ==============================
platform darwin -- Python 3.10.7, pytest-7.1.2, py-1.11.0, pluggy-1.0.0
rootdir: /path/to/your/project
plugins: cov-3.0.0
collected 2 items

tests/test_my_module.py ..                                                [100%]

----------- coverage: platform darwin, python 3.10.7-final-0 -----------
Name              Stmts   Miss  Cover   Missing
-------------------------------------------------
my_module.py          1      0   100%
-------------------------------------------------
TOTAL                 1      0   100%

4. Nose2

nose2 是 nose 的改進版,它支持更多的測試發現機制和插件。

安裝:

pip install nose2

基本用法:

import unittest

class TestAdd(unittest.TestCase):
    def test_add_positive(self):
        self.assertEqual(add(1, 2), 3)

    def test_add_negative(self):
        self.assertEqual(add(-1, -1), -2)

定義一個測試類 TestAdd。

運行測試:

nose2

輸出示例:

.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

5. Hypothesis

hypothesis 是一個強大的參數化測試庫,可以生成大量隨機數據進行測試。

安裝:

pip install hypothesis

基本用法:

from hypothesis import given, strategies as st
from my_module import add

@given(st.integers(), st.integers())
def test_add(a, b):
    assert add(a, b) == a + b
  • 使用 @given 裝飾器定義測試函數。
  • st.integers() 生成整數類型的隨機數據。

運行測試:

pytest

輸出示例:

============================= test session starts ==============================
platform darwin -- Python 3.10.7, pytest-7.1.2, py-1.11.0, pluggy-1.0.0
rootdir: /path/to/your/project
plugins: hypothesis-6.44.0
collected 1 item

tests/test_my_module.py .                                               [100%]

============================== short test summary info ===============================
hypothesis passed 100 tests for test_add, 1.00% of examples were new[100%]

6. Doctest

doctest 是 Python 標準庫中的一個模塊,可以將文檔字符串中的示例作為測試用例。

基本用法:

def add(a, b):
    """
    >>> add(1, 2)
    3
    >>> add(-1, -1)
    -2
    """
    return a + b

在文檔字符串中編寫測試用例。

運行測試:

python -m doctest my_module.py

輸出示例:

Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(-1, -1)
Expecting:
    -2
ok
2 items had no tests:
    my_module
    my_module.add
1 items passed all tests:
   2 tests in my_module.add
2 tests in 1 items.
2 passed and 0 failed.
Test passed.

7. Pytest-Check

pytest-check 是 pytest 的一個插件,提供了一些方便的斷言函數。

安裝:

pip install pytest-check

基本用法:

from check import check

def test_add():
    check.equal(add(1, 2), 3)
    check.equal(add(-1, -1), -2)

使用 check.equal 斷言函數進行驗證。

運行測試:

pytest

輸出示例:

============================= test session starts ==============================
platform darwin -- Python 3.10.7, pytest-7.1.2, py-1.11.0, pluggy-1.0.0
rootdir: /path/to/your/project
plugins: check-0.2.0
collected 1 item

tests/test_my_module.py .                                               [100%]

============================== short test summary info ===============================
1 passed in 0.01s

8. Pytest-Mock

pytest-mock 是一個 pytest 插件,用于模擬對象的行為。

安裝:

pip install pytest-mock

基本用法:

from my_module import some_function
import pytest

def test_some_function(mocker):
    mocker.patch('my_module.some_function', return_value=42)
    result = some_function()
    assert result == 42

使用 mocker.patch 模擬 some_function 的返回值。

運行測試:

pytest

輸出示例:

============================= test session starts ==============================
platform darwin -- Python 3.10.7, pytest-7.1.2, py-1.11.0, pluggy-1.0.0
rootdir: /path/to/your/project
plugins: mock-3.7.0
collected 1 item

tests/test_my_module.py .                                               [100%]

============================== short test summary info ===============================
1 passed in 0.01s

實戰案例:在線購物車系統

假設我們有一個在線購物車系統,用戶可以添加商品到購物車,并查看總價。我們需要編寫單元測試來確保系統的正確性。

代碼實現:

# shopping_cart.py

class ShoppingCart:
    def __init__(self):
        self.items = []

    def add_item(self, item_name, price, quantity=1):
        self.items.append((item_name, price, quantity))

    def get_total(self):
        total = 0
        for item in self.items:
            total += item[1] * item[2]
        return total

單元測試:

# test_shopping_cart.py

import pytest
from shopping_cart import ShoppingCart

def test_add_item():
    cart = ShoppingCart()
    cart.add_item("apple", 2.0, 2)
    assert len(cart.items) == 1

def test_get_total():
    cart = ShoppingCart()
    cart.add_item("apple", 2.0, 2)
    cart.add_item("banana", 1.5, 3)
    assert cart.get_total() == 2 * 2.0 + 3 * 1.5

運行測試:

pytest

輸出示例:

============================= test session starts ==============================
platform darwin -- Python 3.10.7, pytest-7.1.2, py-1.11.0, pluggy-1.0.0
rootdir: /path/to/your/project
collected 2 items

test_shopping_cart.py ..                                               [100%]

============================== short test summary info ===============================
2 passed in 0.01s

總結

本文介紹了 Python 中常用的幾種單元測試框架及其基本用法,包括 unittest、pytest、pytest-cov、nose2、hypothesis、doctest、pytest-check 和 pytest-mock。通過實戰案例展示了如何使用這些框架編寫有效的單元測試,幫助確保代碼的質量和穩定性。

責任編輯:趙寧寧 來源: 手把手PythonAI編程
相關推薦

2023-07-26 08:58:45

Golang單元測試

2017-01-14 23:42:49

單元測試框架軟件測試

2022-05-12 09:37:03

測試JUnit開發

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2011-05-16 16:52:09

單元測試徹底測試

2017-03-23 16:02:10

Mock技術單元測試

2009-09-01 10:20:06

protected方法單元測試

2009-12-23 15:03:52

WPF單元測試

2021-03-28 23:03:50

Python程序員編碼

2012-05-17 09:09:05

Titanium單元測試

2013-06-04 09:49:04

Spring單元測試軟件測試

2010-03-04 15:40:14

Python單元測試

2020-08-18 08:10:02

單元測試Java

2021-09-27 13:02:05

Python技巧測試

2010-08-27 09:11:27

Python單元測試

2009-06-01 10:47:32

jboss seam例jboss seam開jboss seam

2009-08-19 09:00:48

單元測試框架自動化測試

2021-05-05 11:38:40

TestNGPowerMock單元測試

2011-06-20 17:25:02

單元測試
點贊
收藏

51CTO技術棧公眾號

浅井舞香一区二区| 性欧美大战久久久久久久免费观看| 免费成人高清在线视频theav| 午夜精品视频网站| 亚洲午夜精品一区二区国产 | 在线免费不卡电影| 999国产精品一区| 欧美日韩成人免费| 91久久夜色精品国产按摩| 57pao成人永久免费视频| 日韩国产一区二区三区| 97精品在线观看| 久久精品国产免费看久久精品| 久久久久久久有限公司| 综合激情视频| 日韩免费视频播放| 亚洲成av人片一区二区梦乃| 污视频免费在线看| 麻豆精品一区二区av白丝在线| 4438全国成人免费| 少妇高潮一区二区三区| 日韩精品一区二区三区四区 | 九九热爱视频精品视频| 亚洲精品久久区二区三区蜜桃臀| 国产日韩综合一区二区性色av| 国产免费成人在线视频| 麻豆传媒在线免费| 日本精品久久久久影院| 99视频在线精品| 99国内精品久久久久| 国产h视频在线播放| 视频在线一区二区| 国产一区二区免费看| 久久国产精品高清一区二区三区| 欧美资源在线观看| 一本色道亚洲精品aⅴ| 日韩a级在线观看| 亚洲国产成人91porn| 少妇淫片在线影院| 国产日韩欧美一二三区| 成人va在线观看| 电影av在线| 97超级碰碰碰久久久| 精品一二三四区| 成人h小游戏| 91精品国产沙发| 老司机午夜精品| 国产youjizz在线| 2019中文在线观看| 成人动漫在线一区| 美女日批视频在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久精品一区八戒影视| 不卡一二三区| 神马影院午夜我不卡影院| 天天综合天天做天天综合| 成人免费视频网址| 精品成人av一区| 久久国产高清| 精品3atv在线视频| 久久成人福利视频| 久久91超碰青草是什么| 不卡区在线中文字幕| 亚洲黄色免费av| 妞干网在线观看| 91视频8mav| 日日骚久久av| 亚洲精品成人在线| 久久成人亚洲| 国产免费av国片精品草莓男男| 在线视频欧美一区| 欧美性做爰猛烈叫床潮| 神马电影网我不卡| 精品国产91亚洲一区二区三区www| 99久久免费精品| 男女视频在线| 亚洲一区二区久久久久久| 一区在线观看视频| av影片在线一区| 日本精品在线| 日本一区二区在线视频| 欧美激情导航| 国模精品视频一区二区三区| 高跟丝袜一区二区三区| 欧美二区不卡| 综合激情久久| 欧洲综合视频| 亚洲人成在线观| 国产老妇另类xxxxx| 欧洲亚洲成人| 亚洲国产影院| 精品国产户外野外| 色老头在线观看| 欧美精品一区二区三区四区五区| 91黄视频在线| 国产精品久久国产愉拍| 午夜老司机在线观看| 鲁片一区二区三区| 欧美v国产在线一区二区三区| 亚洲欧美一区二区三区孕妇| 秋霞国产午夜精品免费视频| 另类在线视频| 特级西西444www大精品视频| 91九色综合久久| 国内精品小视频| 亚洲毛片av在线| 欧美日韩免费一区二区三区视频| 怡红院精品视频| 国产精品露出视频| 最新天堂中文在线| 午夜激情电影在线播放| 亚洲在线www| 久久久亚洲综合网站| 欧美hdsex| 伊人75在线| 一区二区三区四区视频免费观看 | 黄色免费网站在线| 成人线上播放| 国产成a人亚洲精| 91精品国产91综合久久蜜臀| 青草青草久热精品视频在线网站 | 色呦呦网站一区| 日韩一区在线播放| 制服丝袜中文字幕亚洲| 日韩av在线网| 精品视频二区| 日韩在线电影一区| 麻豆国产va免费精品高清在线| 亚洲欧洲精品成人久久奇米网| 亚洲情侣在线| 欧美一级大黄| 国产网站免费观看| 久久精品国产第一区二区三区最新章节| 日韩精品免费在线播放| 国产亚洲成年网址在线观看| 亚洲91视频| 男人皇宫亚洲男人2020| 一级在线免费视频| 精品福利影视| 欧美人成在线视频| 欧美日韩一区国产| 久久影院电视剧免费观看| 在线成人直播| 成人全视频在线观看在线播放高清| 116极品美女视频在线观看| 久久精品二区| 国色天香2019中文字幕在线观看| 欧美日韩在线免费视频| 91视视频在线直接观看在线看网页在线看| 欧美xxxx中国| 欧美aaa视频| 国产在线一二三区| av免费网站观看| 日韩jizzz| 国产精品久久久久久av福利| 亚洲的天堂在线中文字幕| 亚洲蜜臀av乱码久久精品蜜桃| 美女免费视频一区二区| 成人羞羞视频播放网站| 欧美日韩一区视频| 久章草在线视频| 橘梨纱av一区二区三区在线观看| 亚洲国产视频二区| 激情久久五月天| 一区二区三区毛片| 精品欧美日韩精品| 全色精品综合影院| 国产 日韩 亚洲 欧美| 91在线短视频| 九九九久久久久久| 日韩欧美一区二区久久婷婷| √…a在线天堂一区| 日本 国产 欧美色综合| 欧美日韩在线播放视频| 成人精品高清在线视频| 一本一道波多野毛片中文在线| 欧洲黄色一级视频| 久久精品五月婷婷| 国产欧美va欧美va香蕉在| 精品国产美女在线| 7777精品伊人久久久大香线蕉最新版| 国产日本欧洲亚洲| 国产麻豆成人精品| 亚洲一区二区三区四区五区午夜| 成人a免费视频| 91丨九色丨蝌蚪富婆spa| 亚洲欧洲第一视频| 国产偷人视频免费| 国产高清视频在线| 亚洲大奶少妇| 91精品一区二区三区在线观看| 国产免费亚洲高清| 亚洲欧美视频在线观看视频| 久久精品二区亚洲w码| 欧美日韩午夜| 国产欧美日韩在线一区二区| 亚洲人成777| 亚洲女同志freevdieo| 精品黄色免费中文电影在线播放 | 99久久伊人精品|