unittest----skip裝飾器

當測試用例寫完後,有些模塊有改動時候,會影響到部分用例的執行,這個時候我們希望暫時跳過這些用例。

或者前面某個功能運行失敗了,後面的幾個用例是依賴於這個功能的用例,如果第一步就失敗了,後面的用例也就沒必要去執行了,直接跳過就行,節省用例執行時間。

一、skip裝飾器

skip裝飾器一共有四個

   @unittest.skip(reason)

  • Unconditionally skip the decorated test. reason should describe why the test is being skipped.

    翻譯:無條件跳過用例,reason是說明原因

  • @unittest.skipIf(conditionreason)

  • Skip the decorated test if condition is true.

    翻譯:condition爲true的時候跳過

  • @unittest.skipUnless(conditionreason)

  • Skip the decorated test unless condition is true.

    翻譯:condition爲False的時候跳過

  • @unittest.expectedFailure

  • Mark the test as an expected failure. If the test fails when run, the test is not counted as a failure.

    翻譯:斷言的時候跳過(暫時不知道有啥用,沒看懂,貌似斷言失敗,也變成用例pass了。)

 

二、實例介紹

在默認情況下,unittest 會自動測試每一個測試用例(以 test 開頭的方法),但如果希望臨時跳過某個測試用例,則可以通過如下兩種方式來實現:

  1. 使用 skipXxx 裝飾器來跳過測試用例。unittest 一共提供了 3 個裝飾器,分別是 @unittest.skip(reason)、@unittest.skipIf(condition, reason) 和 @unittest.skipUnless(condition, reason)。其中 skip 代表無條件跳過,skipIf 代表當 condition 爲 True 時跳過;skipUnless 代表當 condition 爲 False 時跳過。
  2. 使用TestCase 的 skipTest() 方法來跳過測試用例。


下面程序示範了使用 @unittest.skip 裝飾器來跳過測試用例(skip_test.py):


 
  1. import unittest
  2.  
  3. from hello import *
  4.  
  5. class TestHello(unittest.TestCase):
  6. # 測試say_hello函數
  7. def test_say_hello(self):
  8. self.assertEqual(say_hello() , "Hello World.")
  9. # 測試add函數
  10. @unittest.skip('臨時跳過test_add')
  11. def test_add(self):
  12. self.assertEqual(add(3, 4) , 7)
  13. self.assertEqual(add(0, 4) , 4)
  14. self.assertEqual(add(-3, 0) , -3)

第 10 行代碼使用 @unittest.skip 裝飾器跳過了 test_add() 測試方法。使用如下命令來運行該測試程序:

python -m unittest skip_test.py

可以看到如下輸出結果:

s.
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK (skipped=1)

在上面輸出結果的第一行可以看到 s.,這表明程序運行了兩個測試用例,s 代表跳過了第一個測試用例,點(.)代表第二個測試用例通過。

此外,程序也可以使用 TestCase 的 skipTest() 方法跳過測試用例。例如,如下程序示範了使用 skipTest() 方法來跳過測試用例(skip_test1.py):


 
  1. import unittest
  2.  
  3. from hello import *
  4.  
  5. class TestHello(unittest.TestCase):
  6. # 測試say_hello函數
  7. def test_say_hello(self):
  8. self.assertEqual(say_hello() , "Hello World.")
  9. # 測試add函數
  10. def test_add(self):
  11. self.skipTest('臨時跳過test_add')
  12. self.assertEqual(add(3, 4) , 7)
  13. self.assertEqual(add(0, 4) , 4)
  14. self.assertEqual(add(-3, 0) , -3)

第 11 行代碼使用 self.skipTest() 方法跳過了測試方法(test_add())。使用如下命令來運行該測試程序:

python -m unittest -v skip_test1.py

上面命令使用了 -v 選項來生成更詳細的測試報告。運行上面命令,可以看到如下輸出結果:

test_add (skip_test2.TestHello) ... skipped '臨時跳過test_add'
test_say_hello (skip_test2.TestHello) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK (skipped=1)

從上面的輸出結果可以看到,unittest 測試跳過了 test_add() 方法,並顯示了跳過的原因:'臨時跳過test_add'(如果不使用 -v 選項,將不會輸出該原因)。

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