」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 單元測試框架-Python 中的單元測試

單元測試框架-Python 中的單元測試

發佈於2024-11-08
瀏覽:319

Unit test framework - unittest in Python

在Python中,最常用的單元測試框架之一是unittest,它包含在標準庫中。它提供了一套豐富的工具來創建和運行測試以及報告結果。

單元測試架構的主要特點

  1. 測試案例:測試案例是透過子類化unittest.TestCase來創建的。類別中以 test_ 開頭的每個方法都被視為一個測試。

  2. Assertions:框架提供了多種斷言方法來檢查預期結果,如assertEqual、assertTrue、assertFalse等

  3. 測試運行程序:該框架包括一個運行測試並報告結果的測試運行程序。

單元測試的基本結構

  1. 導入unittest模組:先導入unittest庫。

  2. 建立測試案例:定義一個繼承自unittest.TestCase的類別。

  3. 定義測試方法:每個方法應以 test_ 開頭並包含斷言以檢查預期行為。

  4. 執行測試:如果直接執行腳本,請使用unittest.main()來執行測試。

簡單範例

這是一個簡單的範例,示範如何使用單元測試框架來測試簡單的函數。

待測試功能

首先,讓我們建立一個簡單的函數來測試:

math_functions.py

def add(a, b):
返回 b

def 減(a, b):
返回 a - b

函數的單元測試

現在,我們將為加法和減法函數建立一個單元測試:

test_math_functions.py

導入單元測試
from math_functions import add, minus # 導入待測試函數

類別 TestMathFunctions(unittest.TestCase):

def test_add(self):
    self.assertEqual(add(2, 3), 5)          # Test case: 2   3 = 5
    self.assertEqual(add(-1, 1), 0)         # Test case: -1   1 = 0
    self.assertEqual(add(0, 0), 0)          # Test case: 0   0 = 0

def test_subtract(self):
    self.assertEqual(subtract(5, 3), 2)     # Test case: 5 - 3 = 2
    self.assertEqual(subtract(-1, -1), 0)   # Test case: -1 - (-1) = 0
    self.assertEqual(subtract(0, 5), -5)    # Test case: 0 - 5 = -5

if 名稱 == 'main':
單元測試.main()

單元測試說明

  1. 導入報表:

import unittest:導入unittest模組。

from math_functions import add、subtract:導入我們要測試的函數。

  1. 建立測試案例:

class TestMathFunctions(unittest.TestCase):定義一個繼承自unittest.TestCase的測試案例類別。

  1. 定義測試方法:

每個以test_開頭的方法代表一個單獨的測試。

在每個測試方法中,self.assertEqual() 檢查函數的輸出是否與預期值相符。

  1. 運行測試:

if name == 'main': unittest.main(): 此行允許腳本在直接執行時執行測試。

運行測試

要執行測試,只需執行 test_math_functions.py 腳本。您可以從命令列執行此操作:

python test_math_functions.py

輸出

如果所有測試都通過,您將看到類似以下的輸出:

..

在 0.001 秒內執行 2 次測試

好的

這顯示test_add和test_subtract方法都成功通過。如果任何斷言失敗,unittest 將報告失敗,顯示哪個測試失敗以及原因。

結論

Python 中的單元測試框架提供了一種簡單有效的方法來建立和運行單元測試。透過為您的函數編寫測試,您可以確保它們按預期運行並在整個開發過程中保持較高的程式碼品質。

版本聲明 本文轉載於:https://dev.to/mrcaption49/crud-functionality-in-django-19n2?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Chrome擴充功能開發:如何開啟頁面右側和頂部的popup.html
    Chrome擴充功能開發:如何開啟頁面右側和頂部的popup.html
    預設在擴充功能圖示下方開啟彈出窗口,我們可以透過建立新視窗來更改位置 chrome.action.onClicked.addListener(async (tab) => { openPopup(tab) }); const openPopup = async (tab) => ...
    程式設計 發佈於2024-11-08
  • 如何在 Bootstrap 中輕鬆水平居中影像?
    如何在 Bootstrap 中輕鬆水平居中影像?
    Bootstrap 圖像居中綜合指南在網頁上水平居中圖像對於實現平衡和視覺吸引力通常至關重要設計。當使用流行的 Bootstrap 框架時,您可能很難找到最有效的方法來實現這種對齊。在本文中,我們將探索使用 Bootstrap 將影像死點置中的簡單解決方案。 .center-block 類別Twit...
    程式設計 發佈於2024-11-08
  • 掌握 Golang:基本程式教學合集
    掌握 Golang:基本程式教學合集
    透過這套全面的程式設計教學深入探索 Golang 的世界!無論您是經驗豐富的開發人員還是剛開始 Golang 之旅,這些精心策劃的課程都將為您提供成為熟練 Gopher 所需的基本技能和知識。 ? Golang HTTP 請求處理 探索 Golang 中 net/http 套件的強...
    程式設計 發佈於2024-11-08
  • 在 C++ 中可以將 void 指標轉換為函式指標嗎?
    在 C++ 中可以將 void 指標轉換為函式指標嗎?
    在C 中將空指標轉換為函數指標將dlsym() 等函數傳回的空指標轉換為函數指標在C中並不簡單。預設情況下,C 98/03 中禁止此類直接轉換。 限制原因在 C 98/03 中,void* 指針用於引用對象,不是函數或成員指針。 C 中的有條件支援0x在 C 0x 中,實作可以選擇支援將 void*...
    程式設計 發佈於2024-11-08
  • 如何在 C++ 中使用enable_if 實作條件成員函式重載?
    如何在 C++ 中使用enable_if 實作條件成員函式重載?
    選擇具有不同enable_if條件的成員函數在C語言中,enable_if是一個工具,用於根據是否有條件啟用或停用某些程式碼模板參數滿足特定條件。當您想要根據模板參數自訂類別或函數的行為時,這可能很有用。 在給定的範例中,目標是建立一個成員函數 MyFunction,該函數根據範本是否參數T是否為整...
    程式設計 發佈於2024-11-08
  • 如何修正 phpMyAdmin 中的「使用者\'Root\'@\'localhost\'\」存取被拒絕的錯誤?
    如何修正 phpMyAdmin 中的「使用者\'Root\'@\'localhost\'\」存取被拒絕的錯誤?
    如何解決phpMyAdmin 中的「存取被拒絕」錯誤如果遇到「存取被拒絕」存取phpMyAdmin 時出現「for user 'root'@'localhost' (using password: NO)」錯誤,通常表示'root' 使用者的密碼設定或...
    程式設計 發佈於2024-11-08
  • Miva 的日子:第 15 天
    Miva 的日子:第 15 天
    這是 100 天 Miva 編碼挑戰中的第 15 天,雖然時間過得很快,但它幫助我大大提高了我的 HTML、CSS 和 JavaScript 技能。 今天,我學習了JavaScript中的兩個概念。顯示物件屬性和 JavaScript 事件。它們對於添加資料以及保持網頁的響應性和互動性非常重要。 ...
    程式設計 發佈於2024-11-08
  • 將 JavaScript 轉換為 TypeScript 的多年經驗:我的關懷意見
    將 JavaScript 轉換為 TypeScript 的多年經驗:我的關懷意見
    I started my JS career in 2015, spent a year working exclusively with it, and then transitioned to TypeScript. I’d love to say 'And never looked back ...
    程式設計 發佈於2024-11-08
  • x86 彙編中的「鎖定」指令是否無限期地保留匯流排?
    x86 彙編中的「鎖定」指令是否無限期地保留匯流排?
    理解x86彙編中的“Lock”指令x86彙編中的“lock”指令是一個前綴,它強制後續指令對總線的獨佔所有權。這可確保 CPU 在該指令的持續時間內完全控制高速緩存行。 停用總線鎖定與通常的理解相反,「lock」前綴不會導致 CPU 鎖定無限期的公車。執行後續指令後,鎖會被釋放。這允許 CPU 僅在...
    程式設計 發佈於2024-11-08
  • Top itemmap Scraper 你該知道的 4
    Top itemmap Scraper 你該知道的 4
    有時需要組織並包含在新網站設計中的資訊量可能會令人難以承受,從而使任務變得更加困難。網站地圖是一個有用的規劃工具,可以幫助組織和簡化網站上需要的材料並刪除任何不需要的頁面。此外,精心設計的網站地圖可為訪客提供正面的體驗,從而提高轉換率。 多年來,最好的網頁設計方法一直包括網站地圖;因此,它們並不是...
    程式設計 發佈於2024-11-08
  • 如何在 Web 瀏覽器中追蹤 XMLHttpRequest 的進度更新?
    如何在 Web 瀏覽器中追蹤 XMLHttpRequest 的進度更新?
    取得 XMLHttpRequest 的進度更新Web 瀏覽器為用戶端伺服器資料交換提供 XMLHttpRequest (XHR) 物件。雖然標準 XHR API 缺乏固有的進度追蹤功能,但有一些方法可以監控資料傳輸的進度。 上傳位元組數:XHR 公開 xhr.upload。 onprogress 事...
    程式設計 發佈於2024-11-08
  • 如何在 JavaScript 中向回呼函數傳遞參數?
    如何在 JavaScript 中向回呼函數傳遞參數?
    在JavaScript 中向回調函數傳遞參數在JavaScript 中,回呼函數通常用於在某個事件發生後執行特定任務。在定義這些函數時,通常需要向它們傳遞相關資料或參數。 傳遞參數的簡單方法是在呼叫回呼函數時將它們明確地設定為實參。例如:function tryMe(param1, param2) ...
    程式設計 發佈於2024-11-08
  • 與 Jira 和 LLM 的互動專案報告
    與 Jira 和 LLM 的互動專案報告
    For all projects I worked on, I used some sort of project management system where project scope was defined as a list of tasks (tickets), and progress...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中對不同格式的日期數組進行排序?
    如何在 PHP 中對不同格式的日期數組進行排序?
    PHP 日期數組排序在 PHP 中對日期數組進行排序可能很棘手,特別是當日期不是標準化格式時。 In根據您的具體情況,您有不同格式的日期數組,例如“11-01-2012”和“01-01-2014”。使用 asort 函數(按升序對數組進行排序)在這種情況下不起作用,因為它將每個日期視為字串並忽略年-...
    程式設計 發佈於2024-11-08
  • 機器學習中的 C++:逃離 Python 與 GIL
    機器學習中的 C++:逃離 Python 與 GIL
    介紹 當 Python 的全域解釋器鎖定 (GIL) 成為需要高並發或原始效能的機器學習應用程式的瓶頸時,C 提供了一個引人注目的替代方案。這篇部落格文章探討如何利用 C 語言進行 ML,並專注於效能、並發性以及與 Python 的整合。 閱讀完整的部落格! ...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3