一個簡單的Case
Unittest框架使用通常需要以下4個必不可少的步驟:
- 導出Unittest框架
import unittest
- 創建測試類
import unittest
class TestMath(unittest.TestCase):
- 創建測試用例和斷言
import unittest
class TestMath(unittest.TestCase):
def test_add(self):
self.assertEqual(5, (2+3)) # 斷言相等
- 從Unittest裏調用main()方法,執行測試用例
if __name__ == '__main__':
unittest.main()
**注意:**測試用例必須以Test開頭
我們現在來做一個簡單的Case,這裏我們用了斷言,是否相等,斷言後面會詳細解釋,先來看看這個Case
import unittest
class TestMath(unittest.TestCase):
def test_add(self):
self.assertEqual(5, (2+3)) # 斷言是否相等
if __name__ == '__main__':
unittest.main()
運行結果:
Ran 1 test in 0.002s
OK
我們可以看到Unittest顯示測試完成,實際測試我們肯定會有失敗的Case,我們再失敗的Case
import unittest
class TestMath(unittest.TestCase):
def test_Add(self):
self.assertEqual(5, (2+3)) # 斷言相等
def test_Add_fail(self):
self.assertEqual(5, (2+1)) # 失敗Case
if __name__ == '__main__':
unittest.main()
運行結果,失敗,並給出失敗原因
3 != 5
Expected :5
Actual :3
setUp()和tearDown()
setUp是測試執行之前調用,裏面可以放一些自己的方法
tearDown()是測試執行之後調用,可以用來清理測試環境等
可以下面這個例子,測試執行之前,我們打印,測試執行時,我們在打印,測試執行完後,我們再打印,
import unittest
class TestMath(unittest.TestCase):
# 用例執行之前,自動執行
def setUp(self):
print("用例執行之前,我會執行")
# 用例執行之後,自動執行
def tearDown(self):
print("用例執行之後,我會執行")
# 斷言相等
def test_Add(self):
self.assertEqual(5, (2+3))
print("相等")
if __name__ == '__main__':
unittest.main()
Unittest斷言
unittest提供了豐富的斷言方法,常用爲以下幾種:
· 判斷相等
assertEqual(a,b)/assertNotEqual(a,b): 斷言值是否相等
assertIs(a,b)/assertIsNot(a,b): 斷言是否同一對象(內存地址一樣)
assertListEqual(list1, list2)/assertItemNotEqual(list1, list2): 斷言列表是否相等
assertDictEqual(dict1, dict2)/assertDictNotEqual(dict1, dict2): 斷言字典是否相等
· 是否爲空
assertIsNone(a)/assertIsNotNone(a)
· 判斷真假
assertTrue(a)/assertFalse(a)
· 是否包含
assertIn(a,b)/assertNotIn(a,b) # b中是否包含a
· 大小判斷
assertGreater(a,b)/assertLess(a,b) : 斷言a>b / 斷言a<b
assertGreaterEqual(a,b)/assertLessEqual: 斷言a>=b / 斷言a<=b
· 類型判斷
assertIsInstance(a,dict)/assertNotIsInstance(a,list) # 斷言a爲字典 / 斷言a非列表
下面再看幾個常用斷言的例子:
import unittest
class TestMath(unittest.TestCase):
# 斷言相等
def test_Add(self):
self.assertEqual(5, (2+3))
print("相等")
# 斷言不等
def test_NotEqual(self):
self.assertNotEqual(5, (1 + 3))
# 斷言爲真
def test_True(self):
self.assertTrue(1 + 1 == 2, "The result is True")
# 斷言爲假
def test_False(self):
self.assertFalse(1 + 1 == 3, "The result is False")
# 斷言包含
def test_In(self):
self.assertIn("s", "solo")
if __name__ == '__main__':
unittest.main()
輸出結果: