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 选项,将不会输出该原因)。

你可能感兴趣的:(unittest----skip装饰器)