UnitTest Framework - ข้ามการทดสอบ
เพิ่มการรองรับการข้ามการทดสอบตั้งแต่ 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)อักขระ 'แสดงว่ามีการข้ามการทดสอบ
ไวยากรณ์ทางเลือกสำหรับการข้ามการทดสอบใช้วิธีการอินสแตนซ์ skipTest () ภายในฟังก์ชันทดสอบ
def testadd2(self):
   self.skipTest("another method for skipping")
   self.assertTrue(add(4 + 5) == 10)นักตกแต่งต่อไปนี้ใช้การข้ามการทดสอบและความล้มเหลวที่คาดไว้ -
| ส. | วิธีการและคำอธิบาย | 
|---|---|
| 1 | unittest.skip(reason) ข้ามการทดสอบตกแต่งโดยไม่มีเงื่อนไข เหตุผลควรอธิบายว่าเหตุใดจึงมีการข้ามการทดสอบ | 
| 2 | unittest.skipIf(condition, reason) ข้ามการทดสอบตกแต่งหากเงื่อนไขเป็นจริง | 
| 3 | unittest.skipUnless(condition, reason) ข้ามการทดสอบตกแต่งเว้นแต่เงื่อนไขจะเป็นจริง | 
| 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()ในตัวอย่างข้างต้นระบบจะข้าม testub () และ 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)