Фреймворк UnitTest - Пропустить тест

Поддержка пропуска тестов была добавлена ​​начиная с 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. Метод и описание
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()

В приведенном выше примере методы 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)