Unittest單元測試框架之旅1(測試套件,斷言)

新建一個calculator.py

class Count(object):

    def __init__(self,a,b):
        self.a = int(a)
        self.b = int(b)

    def add(self):
        return self.a + self.b

一個簡單的類,有構造方法,運行一個加法運算

再建立一個test.py

import calculator

class TestCount():

    def test_add(self):
        try:
            j = calculator.Count(2,3)
            add = j.add()
            #這個意思就是斷言 若果不等於 拋出自定義異常信息
            assert(add == 5),'Integer addition result error!'

        except AssertionError as msg:
            print(msg)
        else:
            print('Test pass')


mytest = TestCount()
mytest.test_add()

運行成功

運行失敗

 

利用unittest運行

from calculator import Count
import unittest

class TestCount(unittest.TestCase):
    #起始方法
    def setUp(self):
        print('test start')

    def test_add(self):
        j = Count(2,3)
        self.assertEqual(j.add(),5)
    #結束方法
    def tearDown(self):
        print('test end')

#if __name__ == '__main__':
#設置這個要用unittest的main來執行
#目前還沒有理解清楚,個人理解
#每一個py文件都可以單獨執行,也就是說每一個py文件裏都有隱藏的__mian__方法
if __name__ == '__main__':
    unittest.main()

 UnitTest的四個重要概念

1.Test Case

一個TestCase就是一個測試用例

2.Test Suite

一個功能的驗證往往需要多個測試用例,這個就是測試套件

3.Test Runner

運行測試用例和套件的,並返回測試結果

4.Test Fixture

對一個測試用例環境的搭建與銷燬,通過覆蓋setUp盒tearDown實現

tearDown的過程很重要,要爲下一個testcase留下一個乾淨的環境

--------利用測試套件,再放入Runner運行-----

暫時失敗

#from calculator import Count
from com.sola.unittest import calculator
import unittest

class TestCount(unittest.TestCase):
    #起始方法
    def setUp(self):
        print('test start')

    def test_add(self):
        j = calculator.Count(2,3)
        self.assertEqual(j.add(),5)

    def test_add2(self):
        j = calculator.Count(8,6)
        self.assertEqual(j.add(),14)
    #結束方法
    def tearDown(self):
        print('test end')

if __name__ == '__main__':
    #構造測試集
    suite = unittest.TestSuite()
    #把類和方法放入運行
    suite.addTest(TestCount("test_add1"))
    #執行測試
    runner = unittest.TextTestRunner()
    runner.run(suite)

還可以給套件傳入數組

suite = unittest.TestSuite()

    case = [TestCount("test_add1"),TestCount("test_add2")]

    suite.addTest(case)

————————————————————————————————————————————————————————

斷言

斷言A數與B數是否相當,如果不相當設定異常msg

import unittest

class Asstest(unittest.TestCase):

    def setUp(self):
        #運行後輸入一個參數
        number = input("Enter a number")
        self.number = int(number)

    def test_case(self):
        #斷言是否10,不是拋出斷言異常,並拋出設定好的斷言信息
        self.assertEqual(self.number,10,msg='Your input is not 10')

    def tearDown(self):
        pass

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

assertIn的用法(判斷是否包含)

import unittest

class testtt(unittest.TestCase):

    def testOne(self):
        self.assertIn('王','王八蛋',msg='瞅瞅')

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

assertIs是否爲同一對象

import unittest

class testtt(unittest.TestCase):

    def testOne(self):

        numA = 5

        numB = 5

        self.assertIs(numA,numB,'是否爲同一對象')

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

還有asserIsNone對象是否爲空,assertIsInstance判斷對象是否爲一個實例等

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章