單元測試框架 - 跳過測試



從 Python 2.7 開始添加了跳過測試的支援。可以有條件地或無條件地跳過單個測試方法或 TestCase 類。框架允許將某個測試標記為“預期失敗”。此測試將“失敗”,但在 TestResult 中不會被計為失敗。

要無條件跳過方法,可以使用以下 unittest.skip() 類方法:

import unittest

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

class SimpleTest(unittest.TestCase):
   @unittest.skip("demonstrating skipping")
   def testadd1(self):
      self.assertEquals(add(4,5),9)

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

由於 skip() 是一個類方法,因此它以 @ 符號為字首。該方法帶有一個引數:一個描述跳過原因的日誌訊息。

執行上述指令碼時,控制檯將顯示以下結果:

C:\Python27>python skiptest.py
s
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK (skipped = 1)

字元“s”表示測試已被跳過。

跳過測試的另一種語法是在測試函式內使用例項方法 skipTest()。

def testadd2(self):
   self.skipTest("another method for skipping")
   self.assertTrue(add(4 + 5) == 10)

以下裝飾器實現測試跳過和預期失敗:

序號 方法和描述
1

unittest.skip(reason)

無條件跳過已裝飾的測試。reason 應描述跳過測試的原因。

2

unittest.skipIf(condition, reason)

如果 condition 為真,則跳過已裝飾的測試。

3

unittest.skipUnless(condition, reason)

除非 condition 為真,否則跳過已裝飾的測試。

4

unittest.expectedFailure()

將測試標記為預期失敗。如果執行時測試失敗,則該測試不會被計為失敗。

以下示例演示了條件跳過和預期失敗的使用。

import unittest

class suiteTest(unittest.TestCase):
   a = 50
   b = 40
   
   def testadd(self):
      """Add"""
      result = self.a+self.b
      self.assertEqual(result,100)

   @unittest.skipIf(a>b, "Skip over this routine")
   def testsub(self):
      """sub"""
      result = self.a-self.b
      self.assertTrue(result == -10)
   
   @unittest.skipUnless(b == 0, "Skip over this routine")
   def testdiv(self):
      """div"""
      result = self.a/self.b
      self.assertTrue(result == 1)

   @unittest.expectedFailure
   def testmul(self):
      """mul"""
      result = self.a*self.b
      self.assertEqual(result == 0)

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

在上面的示例中,testsub() 和 testdiv() 將被跳過。在第一種情況下 a>b 為真,而在第二種情況下 b == 0 不為真。另一方面,testmul() 已被標記為預期失敗。

執行上述指令碼時,兩個跳過的測試顯示“s”,預期失敗顯示為“x”。

C:\Python27>python skiptest.py
Fsxs
================================================================
FAIL: testadd (__main__.suiteTest)
Add
----------------------------------------------------------------------
Traceback (most recent call last):
   File "skiptest.py", line 9, in testadd
      self.assertEqual(result,100)
AssertionError: 90 != 100

----------------------------------------------------------------------
Ran 4 tests in 0.000s

FAILED (failures = 1, skipped = 2, expected failures = 1)
廣告