python unittest之?dāng)嘌约笆纠?/h2>
assert.png

前言

python unintest單元測(cè)試框架提供了一整套內(nèi)置的斷言方法。

  1. 如果斷言失敗,則拋出一個(gè)AssertionError,并標(biāo)識(shí)該測(cè)試為失敗狀態(tài)
  2. 如果異常,則當(dāng)做錯(cuò)誤來(lái)處理
    注意:以上兩種方式的區(qū)別
  3. 如果成功,則標(biāo)識(shí)該測(cè)試為成功狀態(tài)

下面我們看下在unittest框架中定義了哪幾類斷言方法:

  1. 基本的Boolean斷言,即:要么True,要么False的驗(yàn)證
  2. 簡(jiǎn)單比較斷言,例如比較a,b兩個(gè)變量的值
  3. 復(fù)雜斷言

基本斷言方法

基本的斷言方法提供了測(cè)試結(jié)果是True還是False。所有的斷言方法都有一個(gè)msg參數(shù),如果指定msg參數(shù)的值,則將該信息作為失敗的錯(cuò)誤信息返回。

序號(hào) 斷言方法 斷言描述
1 assertEqual(arg1, arg2, msg=None) 驗(yàn)證arg1=arg2,不等則fail
2 assertNotEqual(arg1, arg2, msg=None) 驗(yàn)證arg1 != arg2, 相等則fail
3 assertTrue(expr, msg=None) 驗(yàn)證expr是true,如果為false,則fail
4 assertFalse(expr,msg=None) 驗(yàn)證expr是false,如果為true,則fail
5 assertIs(arg1, arg2, msg=None) 驗(yàn)證arg1、arg2是同一個(gè)對(duì)象,不是則fail
6 assertIsNot(arg1, arg2, msg=None) 驗(yàn)證arg1、arg2不是同一個(gè)對(duì)象,是則fail
7 assertIsNone(expr, msg=None) 驗(yàn)證expr是None,不是則fail
8 assertIsNotNone(expr, msg=None) 驗(yàn)證expr不是None,是則fail
9 assertIn(arg1, arg2, msg=None) 驗(yàn)證arg1是arg2的子串,不是則fail
10 assertNotIn(arg1, arg2, msg=None) 驗(yàn)證arg1不是arg2的子串,是則fail
11 assertIsInstance(obj, cls, msg=None) 驗(yàn)證obj是cls的實(shí)例,不是則fail
12 assertNotIsInstance(obj, cls, msg=None) 驗(yàn)證obj不是cls的實(shí)例,是則fail

看一下上述斷言簡(jiǎn)單的代碼示例

# _*_ coding:utf-8 _*_

__author__ = '苦葉子'

import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

class demoTest(unittest.TestCase):
    def test1(self):
        self.assertEqual(4 + 5,9)
        
    def test2(self):
        self.assertNotEqual(5 * 2,10)
        
    def test3(self):
        self.assertTrue(4 + 5 == 9,"The result is False")
        
    def test4(self):
        self.assertTrue(4 + 5 == 10,"assertion fails")
        
    def test5(self):
        self.assertIn(3,[1,2,3])
        
    def test6(self):
        self.assertNotIn(3, range(5))

if __name__ == '__main__':
   unittest.main()

將上述代碼保存至demoAssert.py中,運(yùn)行以下命令

python demoAssert.py

具體結(jié)果請(qǐng)看運(yùn)行結(jié)果即可,這里不做一一分解了。

比較斷言

unittest框架提供的第二種斷言類型就是比較斷言。

下面我們看下各種比較斷言:

  1. assertAlmostEqual (first, second, places = 7, msg = None, delta = None)

驗(yàn)證first約等于second。
palces: 指定精確到小數(shù)點(diǎn)后多少位,默認(rèn)為7

  1. assertNotAlmostEqual (first, second, places, msg, delta)

驗(yàn)證first不約等于second。
palces: 指定精確到小數(shù)點(diǎn)后多少位,默認(rèn)為7

==注: 在上述的兩個(gè)函數(shù)中,如果delta指定了值,則first和second之間的差值必須≤delta==

  1. assertGreater (first, second, msg = None)

驗(yàn)證first > second,否則fail

  1. assertGreaterEqual (first, second, msg = None)

驗(yàn)證first ≥ second,否則fail

  1. assertLess (first, second, msg = None)

驗(yàn)證first < second,否則fail

  1. assertLessEqual (first, second, msg = None)

驗(yàn)證first ≤ second,否則fail

  1. assertRegexpMatches (text, regexp, msg = None)

驗(yàn)證正則表達(dá)式regexp搜索==匹配==的文本text。
regexp:通常使用re.search()

  1. assertNotRegexpMatches (text, regexp, msg = None)

驗(yàn)證正則表達(dá)式regexp搜索==不匹配==的文本text。
regexp:通常使用re.search()

下面看一個(gè)簡(jiǎn)單的示例

# _*_ coding:utf-8 _*_

__author__ = '苦葉子'

import unittest
import math
import re
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

class demoTest(unittest.TestCase):
   def test1(self):
      self.assertAlmostEqual(22.0/7,3.14)
      
   def test2(self):
      self.assertNotAlmostEqual(10.0/3,3)
      
   def test3(self):
      self.assertGreater(math.pi,3)
      
   def test4(self):
      self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")

if __name__ == '__main__':
   unittest.main()

將上述代碼保存至demoAssert2.py中,運(yùn)行以下命令

python demoAssert2.py

具體結(jié)果請(qǐng)看運(yùn)行結(jié)果即可,這里不做一一分解了。

復(fù)雜斷言

unittest框架提供的第三種斷言類型,可以處理元組、列表、字典等更復(fù)雜的數(shù)據(jù)類型。

序號(hào) 斷言方法 斷言描述
1 assertListEqual (list1, list2, msg = None) 驗(yàn)證列表list1、list2相等,不等則fail,同時(shí)報(bào)錯(cuò)信息返回具體的不同的地方
2 assertTupleEqual (tuple1, tuple2, msg = None) 驗(yàn)證元組tuple1、tuple2相等,不等則fail,同時(shí)報(bào)錯(cuò)信息返回具體的不同的地方
3 assertSetEqual (set1, set2, msg = None) 驗(yàn)證集合set1、set2相等,不等則fail,同時(shí)報(bào)錯(cuò)信息返回具體的不同的地方
4 assertDictEqual (expected, actual, msg = None) 驗(yàn)證字典expected、actual相等,不等則fail,同時(shí)報(bào)錯(cuò)信息返回具體的不同的地方

下面看下具體的示例代碼:

# _*_ coding:utf-8 _*_

__author__ = '苦葉子'

import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

class demoTest(unittest.TestCase):
   def test1(self):
      self.assertListEqual([2,3,4], [1,2,3,4,5])
      
   def test2(self):
      self.assertTupleEqual((1*2,2*2,3*2), (2,4,6))
      
   def test3(self):
      self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})

if __name__ == '__main__':
   unittest.main()

將上述代碼保存至demoAssert2.py中,運(yùn)行以下命令

python demoAssert3.py

具體結(jié)果請(qǐng)看運(yùn)行結(jié)果即可,這里不做一一分解了。

總結(jié)

本次從python unittest提供的三種標(biāo)準(zhǔn)的斷言方法進(jìn)行了分享,要更好的掌握這些斷言,需要去做扎實(shí)的練習(xí)。才能確保后續(xù)用的時(shí)候能更好的應(yīng)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • python自動(dòng)化測(cè)試中尋找元素并進(jìn)行操作,如果在元素好找的情況下,相信大家都可以較熟練地編寫(xiě)用例腳本了,但光進(jìn)行...
    燕京博士閱讀 736評(píng)論 0 3
  • 單元測(cè)試 什么是單元 單元測(cè)試(unit testing),是指對(duì)軟件中的最小可測(cè)試單元(一個(gè)模塊、一個(gè)函數(shù)或者一...
    PPMac閱讀 6,778評(píng)論 0 19
  • 總有人以為 分手就是愛(ài)情的終點(diǎn) 她們以為 只要分手了 只要不再見(jiàn)面 兩個(gè)人就能 把以往的一切 當(dāng)做是過(guò)眼云煙 然后...
    幻夢(mèng)邪魂閱讀 281評(píng)論 0 1
  • 寫(xiě)在前面: 我們今天的目標(biāo)就是把風(fēng)信子中心部分的花團(tuán)畫(huà)好,因?yàn)橹行牟糠治挥谝曈X(jué)的焦點(diǎn),起到吸睛的作用,所以要把它處...
    風(fēng)熏手繪館閱讀 1,089評(píng)論 3 20

友情鏈接更多精彩內(nèi)容