
前言
python unintest單元測(cè)試框架提供了一整套內(nèi)置的斷言方法。
- 如果斷言失敗,則拋出一個(gè)AssertionError,并標(biāo)識(shí)該測(cè)試為失敗狀態(tài)
- 如果異常,則當(dāng)做錯(cuò)誤來(lái)處理
注意:以上兩種方式的區(qū)別 - 如果成功,則標(biāo)識(shí)該測(cè)試為成功狀態(tài)
下面我們看下在unittest框架中定義了哪幾類斷言方法:
- 基本的Boolean斷言,即:要么True,要么False的驗(yàn)證
- 簡(jiǎn)單比較斷言,例如比較a,b兩個(gè)變量的值
- 復(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框架提供的第二種斷言類型就是比較斷言。
下面我們看下各種比較斷言:
- assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
驗(yàn)證first約等于second。
palces: 指定精確到小數(shù)點(diǎn)后多少位,默認(rèn)為7
- assertNotAlmostEqual (first, second, places, msg, delta)
驗(yàn)證first不約等于second。
palces: 指定精確到小數(shù)點(diǎn)后多少位,默認(rèn)為7
==注: 在上述的兩個(gè)函數(shù)中,如果delta指定了值,則first和second之間的差值必須≤delta==
- assertGreater (first, second, msg = None)
驗(yàn)證first > second,否則fail
- assertGreaterEqual (first, second, msg = None)
驗(yàn)證first ≥ second,否則fail
- assertLess (first, second, msg = None)
驗(yàn)證first < second,否則fail
- assertLessEqual (first, second, msg = None)
驗(yàn)證first ≤ second,否則fail
- assertRegexpMatches (text, regexp, msg = None)
驗(yàn)證正則表達(dá)式regexp搜索==匹配==的文本text。
regexp:通常使用re.search()
- 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)用。