Учебники

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 () является методом класса, к нему добавляется префикс @ token. Метод принимает один аргумент: сообщение журнала, описывающее причину пропуска.

Когда приведенный выше скрипт выполняется, на консоли отображается следующий результат:

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 (причина)

Безоговорочно пропустите оформленный тест. причина должна описать, почему тест пропускается.

2

unittest.skipIf (условие, причина)

Пропустите оформленный тест, если условие выполняется.

3

unittest.skipUnless (условие, причина)

Пропустите оформленный тест, если условие не выполняется.

4

unittest.expectedFailure ()

Отметьте тест как ожидаемый сбой. Если тест не пройден во время выполнения, тест не считается ошибочным.

unittest.skip (причина)

Безоговорочно пропустите оформленный тест. причина должна описать, почему тест пропускается.

unittest.skipIf (условие, причина)

Пропустите оформленный тест, если условие выполняется.

unittest.skipUnless (условие, причина)

Пропустите оформленный тест, если условие не выполняется.

unittest.expectedFailure ()

Отметьте тест как ожидаемый сбой. Если тест не пройден во время выполнения, тест не считается ошибочным.

В следующем примере демонстрируется использование условного пропуска и ожидаемого сбоя.

Live Demo

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».