亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
什麼是單元測(cè)試?
為什麼你應(yīng)該進(jìn)行單元測(cè)試
測(cè)試範(fàn)圍的定義
單元測(cè)試的特性
AAA 模式
unittest 簡(jiǎn)介
使用 unittest 編寫(xiě)單元測(cè)試
pytest 簡(jiǎn)介
安裝 pytest
使用 pytest 編寫(xiě)單元測(cè)試
首頁(yè) 後端開(kāi)發(fā) Python教學(xué) python單元測(cè)試指南,並結(jié)成pytest

python單元測(cè)試指南,並結(jié)成pytest

Feb 19, 2025 am 08:57 AM

A Guide to Python Unit Testing with unittest and pytest

本文探討軟件測(cè)試的意義以及為何你應(yīng)該重視它。我們將學(xué)習(xí)如何設(shè)計(jì)單元測(cè)試以及如何編寫(xiě) Python 單元測(cè)試。特別是,我們將探討 Python 中兩個(gè)最常用的單元測(cè)試框架:unittest 和 pytest。

關(guān)鍵要點(diǎn)

  • 單元測(cè)試是軟件開(kāi)發(fā)中至關(guān)重要的環(huán)節(jié),它允許開(kāi)發(fā)人員測(cè)試程序的特定組件或單元,以確保它們按預(yù)期運(yùn)行。 Python 中流行的單元測(cè)試框架包括 unittest 和 pytest。
  • 設(shè)計(jì)良好的單元測(cè)試應(yīng)該快速、獨(dú)立、可重複、可靠且命名恰當(dāng)。 “準(zhǔn)備、執(zhí)行、斷言 (AAA)”模式通常用於組織單元測(cè)試,將設(shè)置、執(zhí)行和驗(yàn)證分開(kāi)。
  • unittest 框架是 Python 標(biāo)準(zhǔn)庫(kù)的一部分,其靈感來(lái)自 Java 的單元測(cè)試框架 JUnit。它使用特殊的斷言方法,並要求將測(cè)試編寫(xiě)為繼承自 unittest.TestCase 類的類的方法。
  • pytest 框架允許使用更少的代碼進(jìn)行複雜的測(cè)試,支持 unittest 測(cè)試套件,並提供超過(guò) 800 個(gè)外部插件。與 unittest 不同,pytest 使用普通的 Python 斷言方法,使其更簡(jiǎn)單、更直觀。
  • 儘管單元測(cè)試有很多優(yōu)點(diǎn),但必須記住,測(cè)試只能證明缺陷的存在,而不能證明缺陷的缺失。即使所有測(cè)試都通過(guò),也不能證明軟件系統(tǒng)沒(méi)有錯(cuò)誤。

軟件測(cè)試簡(jiǎn)介

軟件測(cè)試是檢查軟件產(chǎn)品行為以評(píng)估和驗(yàn)證其是否符合規(guī)範(fàn)的過(guò)程。軟件產(chǎn)品可能包含數(shù)千行代碼和數(shù)百個(gè)協(xié)同工作的組件。如果一行代碼無(wú)法正常工作,則錯(cuò)誤可能會(huì)傳播並導(dǎo)致其他錯(cuò)誤。因此,為了確保程序按預(yù)期運(yùn)行,必須對(duì)其進(jìn)行測(cè)試。

由於現(xiàn)代軟件可能相當(dāng)複雜,因此存在多個(gè)級(jí)別的測(cè)試來(lái)評(píng)估正確性的不同方面。根據(jù) ISTQB 認(rèn)證測(cè)試基礎(chǔ)級(jí)別教學(xué)大綱,軟件測(cè)試有四個(gè)級(jí)別:

  1. 單元測(cè)試:測(cè)試特定的代碼行
  2. 集成測(cè)試:測(cè)試多個(gè)單元之間的集成
  3. 系統(tǒng)測(cè)試:測(cè)試整個(gè)系統(tǒng)
  4. 驗(yàn)收測(cè)試:檢查是否符合業(yè)務(wù)目標(biāo)

本文將討論單元測(cè)試,但在深入探討之前,我想介紹軟件測(cè)試中一個(gè)重要的原則。

測(cè)試只能證明缺陷的存在,而不能證明缺陷的缺失。

ISTQB CTFL 教學(xué)大綱 2018

換句話說(shuō),即使你運(yùn)行的所有測(cè)試都沒(méi)有顯示任何失敗,也不能證明你的軟件系統(tǒng)沒(méi)有錯(cuò)誤,或者另一個(gè)測(cè)試用例不會(huì)發(fā)現(xiàn)你軟件行為中的缺陷。

什麼是單元測(cè)試?

這是第一個(gè)測(cè)試級(jí)別,也稱為組件測(cè)試。在此部分中,對(duì)單個(gè)軟件組件進(jìn)行測(cè)試。根據(jù)編程語(yǔ)言的不同,軟件單元可能是類、函數(shù)或方法。例如,如果你有一個(gè)名為 ArithmeticOperations 的 Java 類,其中包含 multiply 和 divide 方法,則 ArithmeticOperations 類的單元測(cè)試需要測(cè)試 multiply 和 divide 方法的正確行為。

單元測(cè)試通常由軟件測(cè)試人員執(zhí)行。要運(yùn)行單元測(cè)試,軟件測(cè)試人員(或開(kāi)發(fā)人員)需要訪問(wèn)源代碼,因?yàn)樵创a本身就是被測(cè)試的對(duì)象。因此,這種直接測(cè)試源代碼的軟件測(cè)試方法稱為白盒測(cè)試。

你可能想知道為什麼你應(yīng)該擔(dān)心軟件測(cè)試,以及它是否值得。在下一節(jié)中,我們將分析測(cè)試軟件系統(tǒng)背後的動(dòng)機(jī)。

為什麼你應(yīng)該進(jìn)行單元測(cè)試

軟件測(cè)試的主要優(yōu)點(diǎn)是它提高了軟件質(zhì)量。軟件質(zhì)量至關(guān)重要,尤其是在軟件處理我們?nèi)粘;顒?dòng)中各種各樣的世界中。提高軟件質(zhì)量仍然是一個(gè)過(guò)於模糊的目標(biāo)。讓我們嘗試更好地說(shuō)明我們所說(shuō)的軟件質(zhì)量。根據(jù) ISO/IEC 標(biāo)準(zhǔn) 9126-1 ISO 9126,軟件質(zhì)量包括以下因素:

  • 可靠性
  • 功能性
  • 效率
  • 可用性
  • 可維護(hù)性
  • 可移植性

如果你擁有一家公司,那麼你應(yīng)該仔細(xì)考慮軟件測(cè)試活動(dòng),因?yàn)樗鼤?huì)影響你的業(yè)務(wù)。例如,2022 年 5 月,特斯拉召回了 130,000 輛汽車,原因是車輛信息娛樂(lè)系統(tǒng)出現(xiàn)問(wèn)題。然後通過(guò)“空中”分發(fā)的軟件更新解決了這個(gè)問(wèn)題。這些故障給公司造成了時(shí)間和金錢損失,也給客戶帶來(lái)了問(wèn)題,因?yàn)樗麄冇幸欢螘r(shí)間無(wú)法使用他們的汽車。測(cè)試軟件確實(shí)需要花錢,但公司也可以節(jié)省數(shù)百萬(wàn)的技術(shù)支持費(fèi)用。

單元測(cè)試側(cè)重於檢查軟件是否正確運(yùn)行,這意味著檢查輸入和輸出之間的映射是否都正確完成。作為低級(jí)別測(cè)試活動(dòng),單元測(cè)試有助於儘早識(shí)別錯(cuò)誤,從而不會(huì)將其傳播到軟件系統(tǒng)的更高級(jí)別。

單元測(cè)試的其他優(yōu)點(diǎn)包括:

  • 簡(jiǎn)化集成:通過(guò)確保所有組件都能單獨(dú)正常工作,更容易解決集成問(wèn)題。
  • 最大限度地減少代碼回歸:通過(guò)大量的測(cè)試用例,如果將來(lái)對(duì)源代碼進(jìn)行一些修改會(huì)導(dǎo)致問(wèn)題,則更容易找到問(wèn)題。
  • 提供文檔:通過(guò)測(cè)試輸入和輸出之間的正確映射,單元測(cè)試提供了有關(guān)被測(cè)試方法或類的使用方法的文檔。

設(shè)計(jì)測(cè)試策略

現(xiàn)在讓我們看看如何設(shè)計(jì)測(cè)試策略。

測(cè)試範(fàn)圍的定義

在開(kāi)始規(guī)劃測(cè)試策略之前,有一個(gè)重要的問(wèn)題需要回答。你想測(cè)試軟件系統(tǒng)的哪些部分?

這是一個(gè)關(guān)鍵問(wèn)題,因?yàn)楦F舉測(cè)試是不可能的。因此,你無(wú)法測(cè)試所有可能的輸入和輸出,但你應(yīng)該根據(jù)所涉及的風(fēng)險(xiǎn)對(duì)測(cè)試進(jìn)行優(yōu)先級(jí)排序。

在定義測(cè)試範(fàn)圍時(shí),需要考慮許多因素:

  • 風(fēng)險(xiǎn):如果錯(cuò)誤影響此組件,會(huì)產(chǎn)生什麼業(yè)務(wù)後果?
  • 時(shí)間:你希望軟件產(chǎn)品多久準(zhǔn)備好?你有沒(méi)有最後期限?
  • 預(yù)算:你願(yuàn)意投資多少資金用於測(cè)試活動(dòng)?

一旦你定義了測(cè)試範(fàn)圍(指定你應(yīng)該測(cè)試什麼以及不應(yīng)該測(cè)試什麼),你就可以討論一個(gè)好的單元測(cè)試應(yīng)該具備的特性了。

單元測(cè)試的特性

  • 快速。單元測(cè)試大多是自動(dòng)執(zhí)行的,這意味著它們必須快速。緩慢的單元測(cè)試更有可能被開(kāi)發(fā)人員跳過(guò),因?yàn)樗鼈儾粫?huì)提供即時(shí)反饋。
  • 獨(dú)立。單元測(cè)試根據(jù)定義是獨(dú)立的。它們測(cè)試單個(gè)代碼單元,並且不依賴於任何外部因素(例如文件或網(wǎng)絡(luò)資源)。
  • 可重複。單元測(cè)試會(huì)重複執(zhí)行,並且結(jié)果必須隨時(shí)間保持一致。
  • 可靠。只有當(dāng)被測(cè)系統(tǒng)中存在錯(cuò)誤時(shí),單元測(cè)試才會(huì)失敗。環(huán)境或測(cè)試的執(zhí)行順序不應(yīng)該重要。
  • 正確命名。測(cè)試的名稱應(yīng)提供有關(guān)測(cè)試本身的相關(guān)信息。

在深入研究 Python 中的單元測(cè)試之前,還有一個(gè)步驟缺失。我們?nèi)绾谓M織測(cè)試以使它們乾淨(jìng)易讀?我們使用一種稱為準(zhǔn)備、執(zhí)行和斷言 (AAA) 的模式。

AAA 模式

準(zhǔn)備、執(zhí)行和斷言 (AAA) 模式是用於編寫(xiě)和組織單元測(cè)試的常用策略。它的工作方式如下:

  • 在準(zhǔn)備階段,設(shè)置測(cè)試所需的所有對(duì)象和變量。
  • 接下來(lái),在執(zhí)行階段,調(diào)用被測(cè)試的函數(shù)/方法/類。
  • 最後,在斷言階段,我們驗(yàn)證測(cè)試的結(jié)果。

此策略通過(guò)分離測(cè)試的所有主要部分(設(shè)置、執(zhí)行和驗(yàn)證)提供了一種干淨(jìng)的方法來(lái)組織單元測(cè)試。此外,單元測(cè)試更容易閱讀,因?yàn)樗鼈兌甲裱嗤慕Y(jié)構(gòu)。

Python 中的單元測(cè)試:unittest 或 pytest?

我們現(xiàn)在將討論 Python 中的兩個(gè)不同的單元測(cè)試框架。這兩個(gè)框架是 unittest 和 pytest。

unittest 簡(jiǎn)介

Python 標(biāo)準(zhǔn)庫(kù)包含 unittest 單元測(cè)試框架。此框架的靈感來(lái)自 JUnit,它是 Java 中的單元測(cè)試框架。

正如官方文檔中所述,unittest 支持我們將在這篇文章中提到的幾個(gè)重要概念:

  • 測(cè)試用例,這是測(cè)試的單個(gè)單元
  • 測(cè)試套件,這是一組一起執(zhí)行的測(cè)試用例
  • 測(cè)試運(yùn)行器,這是處理所有測(cè)試用例的執(zhí)行和結(jié)果的組件

unittest 有自己的編寫(xiě)測(cè)試的方法。特別是,我們需要:

  1. 將我們的測(cè)試編寫(xiě)為繼承自 unittest.TestCase 類的類的方法
  2. 使用特殊的斷言方法

由於 unittest 已經(jīng)安裝,我們準(zhǔn)備編寫(xiě)我們的第一個(gè)單元測(cè)試!

使用 unittest 編寫(xiě)單元測(cè)試

假設(shè)我們有 BankAccount 類:

import unittest

class BankAccount:
  def __init__(self, id):
    self.id = id
    self.balance = 0

  def withdraw(self, amount):
    if self.balance >= amount:
      self.balance -= amount
      return True
    return False

  def deposit(self, amount):
    self.balance += amount
    return True

我們不能提取超過(guò)存款可用額度的錢,所以讓我們測(cè)試一下我們的源代碼是否正確處理這種情況。

在同一個(gè) Python 文件中,我們可以添加以下代碼:

class TestBankOperations(unittest.TestCase):
    def test_insufficient_deposit(self):
      # Arrange
      a = BankAccount(1)
      a.deposit(100)
      # Act
      outcome = a.withdraw(200)
      # Assert
      self.assertFalse(outcome)

我們正在創(chuàng)建一個(gè)名為 TestBankOperations 的類,它是 unittest.TestCase 的子類。通過(guò)這種方式,我們正在創(chuàng)建一個(gè)新的測(cè)試用例。

在這個(gè)類中,我們定義了一個(gè)單個(gè)測(cè)試函數(shù),其方法以 test 開(kāi)頭。這很重要,因?yàn)槊總€(gè)測(cè)試方法都必須以單詞 test 開(kāi)頭。

我們期望此測(cè)試方法返回 False,這意味著操作失敗了。為了斷言結(jié)果,我們使用一個(gè)名為 assertFalse() 的特殊斷言方法。

我們準(zhǔn)備執(zhí)行測(cè)試了。讓我們?cè)诿钚猩线\(yùn)行此命令:

python -m unittest example.py

這裡,example.py 是包含所有源代碼的文件的名稱。輸出應(yīng)該如下所示:

<code>.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK</code>

很好!這意味著我們的測(cè)試成功了?,F(xiàn)在讓我們看看當(dāng)出現(xiàn)故障時(shí)輸出是什麼樣的。我們將一個(gè)新的測(cè)試添加到之前的類中。讓我們嘗試存入負(fù)數(shù)金額,這當(dāng)然是不可能的。我們的代碼會(huì)處理這種情況嗎?

這是我們的新測(cè)試方法:

  def test_negative_deposit(self):
    # Arrange
    a = BankAccount(1)
    # Act
    outcome = a.deposit(-100)
    # Assert
    self.assertFalse(outcome)

我們可以使用 unittest 的詳細(xì)模式來(lái)執(zhí)行此測(cè)試,方法是使用 -v 標(biāo)誌:

python -m unittest -v example.py

現(xiàn)在的輸出不同了:

<code>test_insufficient_deposit (example.TestBankOperations) ... ok
test_negative_deposit (example.TestBankOperations) ... FAIL

======================================================================
FAIL: test_negative_deposit (example.TestBankOperations)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "example.py", line 35, in test_negative_deposit
    self.assertFalse(outcome)
AssertionError: True is not false

----------------------------------------------------------------------
Ran 2 tests in 0.002s

FAILED (failures=1)</code>

在這種情況下,詳細(xì)標(biāo)誌為我們提供了更多信息。我們知道 test_negative_deposit 失敗了。特別是,AssertionError 告訴我們,預(yù)期結(jié)果應(yīng)該是 false,但 True 不是 false,這意味著該方法返回了 True。

unittest 框架根據(jù)我們的需求提供不同的斷言方法:

  • assertEqual(x,y),測(cè)試 x == y 是否成立
  • assertRaises(exception_type),檢查是否引發(fā)了特定異常
  • assertIsNone(x),測(cè)試 x 是否為 None
  • assertIn(x,y),測(cè)試 x 是否在 y 中

現(xiàn)在我們已經(jīng)基本了解瞭如何使用 unittest 框架編寫(xiě)單元測(cè)試,讓我們來(lái)看看另一個(gè)名為 pytest 的 Python 框架。

pytest 簡(jiǎn)介

pytest 框架是一個(gè) Python 單元測(cè)試框架,它具有一些相關(guān)的特性:

  • 它允許使用更少的代碼進(jìn)行複雜的測(cè)試
  • 它支持 unittest 測(cè)試套件
  • 它提供超過(guò) 800 個(gè)外部插件

由於 pytest 默認(rèn)情況下未安裝,因此我們必須先安裝它。請(qǐng)注意,pytest 需要 Python 3.7 。

安裝 pytest

安裝 pytest 非常容易。你只需要運(yùn)行以下命令:

import unittest

class BankAccount:
  def __init__(self, id):
    self.id = id
    self.balance = 0

  def withdraw(self, amount):
    if self.balance >= amount:
      self.balance -= amount
      return True
    return False

  def deposit(self, amount):
    self.balance += amount
    return True

然後通過(guò)鍵入以下內(nèi)容檢查一切是否已正確安裝:

class TestBankOperations(unittest.TestCase):
    def test_insufficient_deposit(self):
      # Arrange
      a = BankAccount(1)
      a.deposit(100)
      # Act
      outcome = a.withdraw(200)
      # Assert
      self.assertFalse(outcome)

輸出應(yīng)該如下所示:

python -m unittest example.py

很好!讓我們使用 pytest 編寫(xiě)第一個(gè)測(cè)試。

使用 pytest 編寫(xiě)單元測(cè)試

我們將使用之前編寫(xiě)的 BankAccount 類,我們將測(cè)試與之前相同的 method。通過(guò)這種方式,更容易比較使用這兩個(gè)框架編寫(xiě)測(cè)試所需的努力。

要使用 pytest 進(jìn)行測(cè)試,我們需要:

  • 創(chuàng)建一個(gè)目錄並將我們的測(cè)試文件放入其中。
  • 在名稱以 test_ 開(kāi)頭或以 _test.py 結(jié)尾的文件中編寫(xiě)我們的測(cè)試。 pytest 將在當(dāng)前目錄及其子目錄中查找這些文件。

因此,我們創(chuàng)建一個(gè)名為 test_bank.py 的文件並將其放入文件夾中。這是我們的第一個(gè)測(cè)試函數(shù)的樣子:

<code>.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK</code>

正如你所注意到的,與 unittest 版本相比,唯一改變的是 assert 部分。在這裡,我們使用普通的 Python 斷言方法。

現(xiàn)在我們可以看看 test_bank.py 文件:

  def test_negative_deposit(self):
    # Arrange
    a = BankAccount(1)
    # Act
    outcome = a.deposit(-100)
    # Assert
    self.assertFalse(outcome)

要運(yùn)行此測(cè)試,讓我們?cè)诎?test_bank.py 文件的文件夾中打開(kāi)一個(gè)命令提示符。然後,運(yùn)行以下命令:

python -m unittest -v example.py

輸出將如下所示:

<code>test_insufficient_deposit (example.TestBankOperations) ... ok
test_negative_deposit (example.TestBankOperations) ... FAIL

======================================================================
FAIL: test_negative_deposit (example.TestBankOperations)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "example.py", line 35, in test_negative_deposit
    self.assertFalse(outcome)
AssertionError: True is not false

----------------------------------------------------------------------
Ran 2 tests in 0.002s

FAILED (failures=1)</code>

在這種情況下,我們可以看到編寫(xiě)和執(zhí)行測(cè)試是多麼容易。此外,我們可以看到與 unittest 相比,我們編寫(xiě)的代碼更少。測(cè)試的結(jié)果也很容易理解。

讓我們繼續(xù)看看失敗的測(cè)試!

我們使用之前編寫(xiě)的第二個(gè)方法,它被稱為 test_negative_deposit。我們重構(gòu) assert 部分,結(jié)果如下:

pip install -U pytest

我們像以前一樣運(yùn)行測(cè)試,這應(yīng)該是輸出:

pytest --version

通過(guò)解析輸出,我們可以讀取 collected 2 items,這意味著已經(jīng)執(zhí)行了兩個(gè)測(cè)試。向下滾動(dòng),我們可以看到在測(cè)試 test_negative_deposit 方法時(shí)發(fā)生了一個(gè)錯(cuò)誤。特別是,錯(cuò)誤發(fā)生在評(píng)估斷言時(shí)。此外,報(bào)告還指出 outcome 變量的值為 True,這意味著 deposit 方法包含錯(cuò)誤。

由於 pytest 使用默認(rèn)的 Python 斷言關(guān)鍵字,我們可以將獲得的任何輸出與存儲(chǔ)預(yù)期結(jié)果的另一個(gè)變量進(jìn)行比較。所有這些都不需要使用特殊的斷言方法。

結(jié)論

總而言之,在本文中,我們介紹了軟件測(cè)試的基礎(chǔ)知識(shí)。我們發(fā)現(xiàn)了為什麼軟件測(cè)試至關(guān)重要以及為什麼每個(gè)人都應(yīng)該測(cè)試他們的代碼。我們討論了單元測(cè)試以及如何在 Python 中設(shè)計(jì)和實(shí)現(xiàn)簡(jiǎn)單的單元測(cè)試。

我們使用了兩個(gè)名為 unittest 和 pytest 的 Python 框架。兩者都具有有用的功能,並且它們是 Python 單元測(cè)試中最常用的兩個(gè)框架。

最後,我們看到了兩個(gè)基本的測(cè)試用例,以讓你了解如何按照準(zhǔn)備、執(zhí)行和斷言模式編寫(xiě)測(cè)試。

我希望我已經(jīng)說(shuō)服你軟件測(cè)試的重要性。選擇一個(gè)框架,例如 unittest 或 pytest,然後開(kāi)始測(cè)試——因?yàn)轭~外的努力是值得的!

如果你喜歡這篇文章,你可能還會(huì)發(fā)現(xiàn)以下內(nèi)容有用:

  • Cypress 測(cè)試:運(yùn)行 Web 應(yīng)用程序測(cè)試指南
  • 如何使用 Jest 測(cè)試 React 組件
  • 使用 Puppeteer 學(xué)習(xí)端到端測(cè)試
  • 免提持續(xù)測(cè)試的 3 種方法
  • 重新介紹 Jenkins:使用管道進(jìn)行自動(dòng)化測(cè)試

關(guān)於 Python 單元測(cè)試的常見(jiàn)問(wèn)題

什麼是 Python 中的單元測(cè)試? Python 中的單元測(cè)試是一種軟件測(cè)試技術(shù),其中程序的單個(gè)單元或組件被隔離測(cè)試,以確保每個(gè)單元都能按預(yù)期工作。

為什麼單元測(cè)試在 Python 開(kāi)發(fā)中很重要?單元測(cè)試有助於確保 Python 程序中各個(gè)組件的正確性。它有助於儘早發(fā)現(xiàn)錯(cuò)誤,為代碼更改提供安全網(wǎng),並支持代碼的可維護(hù)性。

如何在 Python 中編寫(xiě)單元測(cè)試? Python 中的單元測(cè)試通常使用內(nèi)置的 unittest 模塊編寫(xiě)。你創(chuàng)建繼承自 unittest.TestCase 的測(cè)試類,並在這些類中編寫(xiě)測(cè)試方法。測(cè)試方法通常以“test”開(kāi)頭。

除了 unittest,我還能使用哪些其他框架進(jìn)行 Python 單元測(cè)試?是的,除了 unittest 之外,還有其他流行的 Python 測(cè)試框架,例如 pytest 和 nose2。這些框架提供了不同的功能和語(yǔ)法,使開(kāi)發(fā)人員可以選擇最適合其需求的框架。

Python 單元測(cè)試中的 fixture 的作用是什麼? Fixture 是一種在 Python 中設(shè)置前提條件並在測(cè)試後清理的方法。它們有助於確保測(cè)試是獨(dú)立的並且可以獨(dú)立運(yùn)行。

什麼是測(cè)試覆蓋率,為什麼它很重要?測(cè)試覆蓋率衡量的是你的測(cè)試所執(zhí)行的代碼庫(kù)的百分比。它有助於識(shí)別未經(jīng)測(cè)試的代碼,並確保你的測(cè)試是全面的,從而減少發(fā)現(xiàn)錯(cuò)誤的可能性。

在 Python 中編寫(xiě)有效的單元測(cè)試有哪些最佳實(shí)踐?是的,一些最佳實(shí)踐包括編寫(xiě)?yīng)毩⒑透綦x的測(cè)試,使用描述性的測(cè)試方法名稱以及測(cè)試邊界情況。此外,要努力獲得良好的測(cè)試覆蓋率並經(jīng)常運(yùn)行測(cè)試。

以上是python單元測(cè)試指南,並結(jié)成pytest的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
Python類中的多態(tài)性 Python類中的多態(tài)性 Jul 05, 2025 am 02:58 AM

多態(tài)是Python面向?qū)ο缶幊讨械暮诵母拍睿浮耙环N接口,多種實(shí)現(xiàn)”,允許統(tǒng)一處理不同類型的對(duì)象。 1.多態(tài)通過(guò)方法重寫(xiě)實(shí)現(xiàn),子類可重新定義父類方法,如Animal類的speak()方法在Dog和Cat子類中有不同實(shí)現(xiàn)。 2.多態(tài)的實(shí)際用途包括簡(jiǎn)化代碼結(jié)構(gòu)、增強(qiáng)可擴(kuò)展性,例如圖形繪製程序中統(tǒng)一調(diào)用draw()方法,或遊戲開(kāi)發(fā)中處理不同角色的共同行為。 3.Python實(shí)現(xiàn)多態(tài)需滿足:父類定義方法,子類重寫(xiě)該方法,但不要求繼承同一父類,只要對(duì)象實(shí)現(xiàn)相同方法即可,這稱為“鴨子類型”。 4.注意事項(xiàng)包括保持方

解釋Python發(fā)電機(jī)和迭代器。 解釋Python發(fā)電機(jī)和迭代器。 Jul 05, 2025 am 02:55 AM

迭代器是實(shí)現(xiàn)__iter__()和__next__()方法的對(duì)象,生成器是簡(jiǎn)化版的迭代器,通過(guò)yield關(guān)鍵字自動(dòng)實(shí)現(xiàn)這些方法。 1.迭代器每次調(diào)用next()返回一個(gè)元素,無(wú)更多元素時(shí)拋出StopIteration異常。 2.生成器通過(guò)函數(shù)定義,使用yield按需生成數(shù)據(jù),節(jié)省內(nèi)存且支持無(wú)限序列。 3.處理已有集合時(shí)用迭代器,動(dòng)態(tài)生成大數(shù)據(jù)或需惰性求值時(shí)用生成器,如讀取大文件時(shí)逐行加載。注意:列表等可迭代對(duì)像不是迭代器,迭代器到盡頭後需重新創(chuàng)建,生成器只能遍歷一次。

如何處理Python中的API身份驗(yàn)證 如何處理Python中的API身份驗(yàn)證 Jul 13, 2025 am 02:22 AM

處理API認(rèn)證的關(guān)鍵在於理解並正確使用認(rèn)證方式。 1.APIKey是最簡(jiǎn)單的認(rèn)證方式,通常放在請(qǐng)求頭或URL參數(shù)中;2.BasicAuth使用用戶名和密碼進(jìn)行Base64編碼傳輸,適合內(nèi)部系統(tǒng);3.OAuth2需先通過(guò)client_id和client_secret獲取Token,再在請(qǐng)求頭中帶上BearerToken;4.為應(yīng)對(duì)Token過(guò)期,可封裝Token管理類自動(dòng)刷新Token;總之,根據(jù)文檔選擇合適方式,並安全存儲(chǔ)密鑰信息是關(guān)鍵。

解釋Python斷言。 解釋Python斷言。 Jul 07, 2025 am 12:14 AM

Assert是Python用於調(diào)試的斷言工具,當(dāng)條件不滿足時(shí)拋出AssertionError。其語(yǔ)法為assert條件加可選錯(cuò)誤信息,適用於內(nèi)部邏輯驗(yàn)證如參數(shù)檢查、狀態(tài)確認(rèn)等,但不能用於安全或用戶輸入檢查,且應(yīng)配合清晰提示信息使用,僅限開(kāi)發(fā)階段輔助調(diào)試而非替代異常處理。

如何一次迭代兩個(gè)列表 如何一次迭代兩個(gè)列表 Jul 09, 2025 am 01:13 AM

在Python中同時(shí)遍歷兩個(gè)列表的常用方法是使用zip()函數(shù),它會(huì)按順序配對(duì)多個(gè)列表並以最短為準(zhǔn);若列表長(zhǎng)度不一致,可使用itertools.zip_longest()以最長(zhǎng)為準(zhǔn)並填充缺失值;結(jié)合enumerate()可同時(shí)獲取索引。 1.zip()簡(jiǎn)潔實(shí)用,適合成對(duì)數(shù)據(jù)迭代;2.zip_longest()處理不一致長(zhǎng)度時(shí)可填充默認(rèn)值;3.enumerate(zip())可在遍歷時(shí)獲取索引,滿足多種複雜場(chǎng)景需求。

什麼是Python型提示? 什麼是Python型提示? Jul 07, 2025 am 02:55 AM

typeHintsInpyThonsolverbromblemboyofambiguityandPotentialBugSindyNamalytyCodeByallowingDevelopsosteSpecefectifyExpectedTypes.theyenhancereadability,enablellybugdetection,andimprovetool.typehintsupport.typehintsareadsareadsareadsareadsareadsareadsareadsareadsareaddedusidocolon(

什麼是Python迭代器? 什麼是Python迭代器? Jul 08, 2025 am 02:56 AM

Inpython,IteratorSareObjectSthallowloopingThroughCollectionsByImplementing_iter __()和__next __()。 1)iteratorsWiaTheIteratorProtocol,使用__ITER __()toreTurnterateratoratoranteratoratoranteratoratorAnterAnteratoratorant antheittheext__()

Python Fastapi教程 Python Fastapi教程 Jul 12, 2025 am 02:42 AM

要使用Python創(chuàng)建現(xiàn)代高效的API,推薦使用FastAPI;其基於標(biāo)準(zhǔn)Python類型提示,可自動(dòng)生成文檔,性能優(yōu)越。安裝FastAPI和ASGI服務(wù)器uvicorn後,即可編寫(xiě)接口代碼。通過(guò)定義路由、編寫(xiě)處理函數(shù)並返回?cái)?shù)據(jù),可以快速構(gòu)建API。 FastAPI支持多種HTTP方法,並提供自動(dòng)生成的SwaggerUI和ReDoc文檔系統(tǒng)。 URL參數(shù)可通過(guò)路徑定義捕獲,查詢參數(shù)則通過(guò)函數(shù)參數(shù)設(shè)置默認(rèn)值實(shí)現(xiàn)。合理使用Pydantic模型有助於提升開(kāi)發(fā)效率和準(zhǔn)確性。

See all articles