91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

unittest斷言的使用

發布時間:2020-08-06 23:08:13 來源:ITPUB博客 閱讀:178 作者:Winter 欄目:編程語言

斷言使用

  • 我們可以直接在測試用例里面添加unittest框架自帶的斷言(也就相當于判斷),斷言方法提供了測試結果是True還是False,所有的斷言方法都有一個msg參數,如果指定msg參數的值,則將該信息作為失敗的錯誤信息返回;

  • 如果斷言失敗則拋出一個AssertionError,并標識該測試為失敗狀態;如果成功,則標識該測試為成功狀態;如果異常,則當做錯誤來處理;

先來看一個實例,在一個測試類MyTestCase中添加多個測試方法和斷言


from unittest import TestCase, main, skip
class MyTestCase(TestCase):
    def setUp(self):
        print('setUp')
    def tearDown(self):
        print('tearDown')
    def test_print1(self):
        print('第一個測試用例')
        # unittest框架自帶的斷言,如果不相等,直接拋出異常,相等什么都不做
        self.assertEqual(200, 200, '測試失敗')
    def test_print2(self):
        print('第二個測試用例')
    def test_print3(self):
        print('第三個測試用例')
if __name__ == '__main__':
    main()
========輸出========:
setUp
第一個測試用例
tearDown
setUp
第二個測試用例
tearDown
setUp
第三個測試用例
tearDown

這里有三個測試用例,每個測試用例開始之前都先執行了setUp方法,每個測試用例之后都執行了tearDown方法。如果我們想要忽略某個測試用例不執行,要怎么做?比如忽略第三個測試用例,只需要在第三個測試用例之前加上skip裝飾器:


@skip('do not need test_print3')
    def test_print3(self):
        print('第三個測試用例')

skip裝飾器

  • 我們可以使用unitest.skip裝飾器跳過不需要的測試用例, @unittest .skip(reason) 表示無條件跳過測試用例,reason是用來說明原因的;

  • @unittest .skipIf(conditition,reason) :condititon為true時跳過測試用例;

  • @unittest .skipunless(condition,reason) :condition為False時跳過測試用例;

之前我們學習了setup方法和setUpClass方法,會在每個測試用例的前后都執行一遍,那如果我們只想要在所有測試用例的前后執行一遍,也就是在整個類中只執行一遍要怎么辦呢,我們可以使用setUpClass方法和tearDownClass方法:


from unittest import TestCase, main, skip
class MyTestCase(TestCase):
    @classmethod
    def setUpClass(cls):
        print('setUpClass')
    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')
    def test_print1(self):
        print('第一個測試用例')
        # unittest框架自帶的斷言,如果不相等,直接拋出異常,相等什么都不做
        self.assertEqual(200, 200, '測試失敗')
    def test_print2(self):
        print('第二個測試用例')
    @skip('do not need test_print3')
    def test_print3(self):
        print('第三個測試用例')
if __name__ == '__main__':
    main()
==========輸出===========
setUpClass
第一個測試用例
第二個測試用例
tearDownClass

setUpClass和tearDownClass的使用

  • setup方法和teardown方法在每次執行一個測試用例時都會重新執行一遍,所以要想在整個類中只執行一遍可以用setUpClass和tearDownClass方法;

  • setUpClass :需要添加 @classmethod 裝飾器,在一個類中只會在所有測試用例運行前調用一次;

  • tearDownClass :需要添加 @classmethod 裝飾器,在所有測試用例運行后調用一次;

引入測試用例集,將測試用例與測試集合分開

  • 首先可以先在一個文件中寫好測試用例模塊,然后在另一個文件中導入這個模塊,再使用 unittest.TestSuite類 創建測試套件,然后使用這個類的addTest() 方法將需要被測試的測試用例添加到測試套件中,最后使用 unittest.TextTestRunner類 中的run()方法來運行suite所組裝的測試用例;
  • 測試用例模塊

from unittest import TestCase
from unittest import skip
from unittest import main as main_method
class MyTestCase(TestCase):
    @classmethod
    def setUpClass(cls):
        print('setUpClass')
    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')
    def test_print1(self):
        print('第一個測試用例')
        self.assertEqual(200, 200, '測試失敗')
    def test_print2(self):
        print('第一個測試用例')
    @skip('do not need test_print3')
    def test_print3(self):
        print('第一個測試用例')
if __name__ == '__main__':
    main_method()

  • 測試集模塊

from test1 import MyTestCase
from unittest import TestSuite, TextTestRunner
suite = TestSuite()
# 在測試用例集中添加測試用例, 只添加兩個測試的方法
suite.addTest(MyTestCase('test_print1'))
suite.addTest(MyTestCase('test_print3'))
if __name__ == '__main__':
    # 創建測試runner,執行測試用例集
    runner = TextTestRunner()
    runner.run(suite)
=========輸出=============
setUpClass
第一個測試用例
tearDownClass

我們運行這段代碼,只有第一個測試用例輸出,因為我們只將第一個和第三個測試用例加入到測試集中,所有第二個測試用例不會執行,而我們在第三個測試用例前面機上了skip裝飾器會跳過此測試用例,所有第三個也不會執行啦。

將待測試函數、測試用例、測試用例集分開

  • 將待測試函數、測試用例、測試用例集分別放在不同的文件中,先在測試用例中導入待測試函數,然后使用斷言判斷函數是否正確,接著在測試用例集中創健測試套件,且將測試用例加入套件里面,最后運行;
  • 測試函數

def add(x, y):
    return x + y
def sub(x, y):
    return x - y

  • 測試用例

from unittest import TestCase
from unittest import skip
from unittest import main as main_method
from add_sub import add, sub
class MyTestCase(TestCase):
    @classmethod
    def setUpClass(cls):
        print('setUpClass')
    @classmethod
    def tearDownClass(cls):
        print('tearDownClass')
    def test_print1(self):
        ret = 1 + 2
        result = add(1, 2)
        self.assertEqual(result, ret, 'test_print1測試失敗')
    def test_print2(self):
        print('第二個測試用例')
    @skip('do not need test_print3')
    def test_print3(self):
        print('第三個測試用例')
if __name__ == '__main__':
    main_method()

  • 測試用例集

from test import MyTestCase
from unittest import TestSuite, TextTestRunner
suite = TestSuite()
# 在測試用例集中添加測試用例
suite.addTest(MyTestCase('test_print1'))
suite.addTest(MyTestCase('test_print2'))
suite.addTest(MyTestCase('test_print3'))
if __name__ == '__main__':
    # 創建測試runner,執行測試用例集
    runner = TextTestRunner()
    runner.run(suite)
========輸出=========
setUpClass
第一個測試用例
第二個測試用例
tearDownClass

參考: https://www.9xkd.com/user/plan-view.html?id=4822012440

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

涿鹿县| 泸定县| 德昌县| 宁晋县| 潜江市| 永新县| 阜阳市| 安顺市| 菏泽市| 贡山| 茶陵县| 涿鹿县| 资源县| 介休市| 乐都县| 福州市| 楚雄市| 乳源| 临高县| 阿拉善左旗| 万荣县| 昭平县| 富民县| 南江县| 墨竹工卡县| 龙海市| 成武县| 德安县| 邻水| 洛阳市| 宁国市| 抚顺市| 昭觉县| 个旧市| 巨野县| 玉树县| 保山市| 同江市| 洱源县| 澎湖县| 呼伦贝尔市|