unittest 模塊提供了一組豐富的工具,用于構(gòu)造和運(yùn)行測試。本節(jié)演示了一小部分工具足以滿足大多數(shù)用戶的需求。
下面是一個(gè)測試三個(gè)字符串方法(這三個(gè)方法分別為upper方法,isupper和split()方法)的簡短腳本:
import unittest
class TestStringMethods(unittest.TestCase):
#測試upper方法,測試字符串'foo'使用upper方法后是否返回'FOO'
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
#測試isupper方法,測試字符串'FOO'使用isupper方法后是否返回true,測試字符串'Foo'使用isupper后是否返回false
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
#測試split方法,測試字符串s能不能被正常的分割為兩個(gè)字符串(存在列表中)
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# 當(dāng)分隔符不是字符串時(shí),檢查 s.split 是否失敗
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
測試用例是通過繼承 unittest.TestCase 來創(chuàng)建的。這三個(gè)單獨(dú)的測試是用名稱以字母 ?test
?開頭的方法定義的。此命名約定告知測試運(yùn)行程序哪些方法代表測試。
每個(gè)測試的關(guān)鍵是調(diào)用 assertEqual() 以檢查預(yù)期結(jié)果; assertTrue() 或 assertFalse() 驗(yàn)證條件;或 assertRaises() 以驗(yàn)證是否引發(fā)了特定異常。這些方法用于代替 assert 語句,因此測試運(yùn)行者可以累積所有測試結(jié)果并生成報(bào)告。
setUp() 和 tearDown() 方法允許您定義將在每個(gè)測試方法之前和之后執(zhí)行的指令。它們?cè)诮M織測試代碼部分中有更詳細(xì)的介紹。
最后一個(gè)塊顯示了一種運(yùn)行測試的簡單方法。 unittest.main() 為測試腳本提供了一個(gè)命令行界面。從命令行運(yùn)行時(shí),上面的腳本會(huì)生成如下所示的輸出:
... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK
假設(shè)上述代碼保存在一個(gè)叫test.py的文件中,那么運(yùn)行該代碼為?
python -m unittest test.py
?
將?-v
?選項(xiàng)傳遞給測試腳本將指示 unittest.main() 啟用更高級(jí)別的詳細(xì)程度,并生成以下輸出:
test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
傳遞-v選項(xiàng)是在命令行中傳遞的,
假設(shè)上述代碼保存在一個(gè)叫test.py的文件中,那么運(yùn)行該代碼為?python -m unittest -v test.py
?
上面的例子顯示了unittest最常用的功能,這些功能足以滿足許多日常測試需求。本文檔的其余部分從第一原則開始探討完整的功能集。
更多建議: