Unittest Framework 简明教程

UnitTest Framework - Skip Test

自 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)

以下装饰器实现测试跳过和预期失败:

S.No.

Method & Description

1

unittest.skip(reason) 无条件跳过装饰后的测试。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()

在上面的示例中,将跳过 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)