Учебники

UnitTest Framework — Утверждение

Среда тестирования Python использует встроенную в Python функцию assert (), которая проверяет определенное условие. Если утверждение не выполнено, возникает ошибка AssertionError. Затем структура тестирования идентифицирует тест как «Отказ». Другие исключения рассматриваются как ошибки.

Следующие три набора функций утверждения определены в модуле unittest —

  • Основные булевы утверждения
  • Сравнительные утверждения
  • Активы для коллекций

Основные функции подтверждения оценивают, является ли результат операции Истинным или Ложным. Все методы assert принимают аргумент msg, который, если указан, используется в качестве сообщения об ошибке при сбое.

Sr.No. Метод и описание
1

assertEqual (arg1, arg2, msg = None)

Проверьте, что arg1 и arg2 равны. Если значения не совпадают, тест не пройден.

2

assertNotEqual (arg1, arg2, msg = None)

Проверьте, что arg1 и arg2 не равны. Если значения сравниваются равными, тест не пройден.

3

assertTrue (expr, msg = None)

Проверьте, что expr верно. Если false, тест не пройден

4

assertFalse (expr, msg = None)

Проверьте, что expr ложно. Если это правда, тест не пройден

5

assertIs (arg1, arg2, msg = None)

Проверьте, что arg1 и arg2 оценивают один и тот же объект.

6

assertIsNot (arg1, arg2, msg = None)

Проверьте, что arg1 и arg2 не оценивают один и тот же объект.

7

assertIsNone (expr, msg = None)

Проверьте, что expr — None. Если нет, тест не пройден

8

assertIsNotNone (expr, msg = None)

Проверьте, что expr не None. Если нет, тест не пройден

9

assertIn (arg1, arg2, msg = нет)

Проверьте, что arg1 находится в arg2 .

10

assertNotIn (arg1, arg2, msg = None)

Проверьте, что arg1 отсутствует в arg2 .

11

assertIsInstance (obj, cls, msg = None)

Проверьте, что obj является экземпляром cls

12

assertNotIsInstance (obj, cls, msg = None)

Проверьте, что obj не является экземпляром cls

assertEqual (arg1, arg2, msg = None)

Проверьте, что arg1 и arg2 равны. Если значения не совпадают, тест не пройден.

assertNotEqual (arg1, arg2, msg = None)

Проверьте, что arg1 и arg2 не равны. Если значения сравниваются равными, тест не пройден.

assertTrue (expr, msg = None)

Проверьте, что expr верно. Если false, тест не пройден

assertFalse (expr, msg = None)

Проверьте, что expr ложно. Если это правда, тест не пройден

assertIs (arg1, arg2, msg = None)

Проверьте, что arg1 и arg2 оценивают один и тот же объект.

assertIsNot (arg1, arg2, msg = None)

Проверьте, что arg1 и arg2 не оценивают один и тот же объект.

assertIsNone (expr, msg = None)

Проверьте, что expr — None. Если нет, тест не пройден

assertIsNotNone (expr, msg = None)

Проверьте, что expr не None. Если нет, тест не пройден

assertIn (arg1, arg2, msg = нет)

Проверьте, что arg1 находится в arg2 .

assertNotIn (arg1, arg2, msg = None)

Проверьте, что arg1 отсутствует в arg2 .

assertIsInstance (obj, cls, msg = None)

Проверьте, что obj является экземпляром cls

assertNotIsInstance (obj, cls, msg = None)

Проверьте, что obj не является экземпляром cls

Некоторые из приведенных выше функций утверждения реализованы в следующем коде:

Live Demo

import unittest

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertEqual(4 + 5,9)
   def test2(self):
      self.assertNotEqual(5 * 2,10)
   def test3(self):
      self.assertTrue(4 + 5 == 9,"The result is False")
   def test4(self):
      self.assertTrue(4 + 5 == 10,"assertion fails")
   def test5(self):
      self.assertIn(3,[1,2,3])
   def test6(self):
      self.assertNotIn(3, range(5))

if __name__ == '__main__':
   unittest.main()

Когда приведенный выше сценарий запущен, test2, test4 и test6 покажут сбой, а другие запустятся успешно.

FAIL: test2 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 9, in test2
      self.assertNotEqual(5*2,10)
AssertionError: 10 == 10

FAIL: test4 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 13, in test4
      self.assertTrue(4+5==10,"assertion fails")
AssertionError: assertion fails

FAIL: test6 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:\Python27\SimpleTest.py", line 17, in test6
      self.assertNotIn(3, range(5))
AssertionError: 3 unexpectedly found in [0, 1, 2, 3, 4]

----------------------------------------------------------------------            
Ran 6 tests in 0.001s                                                             
                                                                                  
FAILED (failures = 3)

Вторым набором функций утверждения являются сравнительные утверждения

  • assertAlmostEqual (первый, второй, мест = 7, сообщения = нет, дельта = нет)

    Проверьте, что первое и второе приблизительно (или не приблизительно) равны, вычисляя разницу, округляя до заданного числа десятичных знаков (по умолчанию 7),

  • assertNotAlmostEqual (первое, второе, места, сообщения, дельта)

    Проверьте, что первое и второе не приблизительно равны, вычислив разницу, округлив до заданного числа десятичных знаков (по умолчанию 7) и сравнив с нулем.

    В обеих вышеупомянутых функциях, если вместо мест указывается дельта, то разница между первым и вторым должна быть меньше или равна (или больше) дельте.

    Предоставление и дельты, и мест вызывает ошибку TypeError.

  • assertGreater (первый, второй, сообщения = нет)

    Проверьте, что first больше второго, в зависимости от имени метода. Если нет, тест не пройден.

  • assertGreaterEqual (первый, второй, сообщение = нет)

    Проверьте, что first больше или равно second, в зависимости от имени метода. Если нет, тест не пройден

  • assertLess (первое, второе, сообщение = нет)

    Проверьте, что первое меньше второго, в зависимости от имени метода. Если нет, тест не пройден

  • assertLessEqual (first, second, msg = None)

    Проверьте, что first меньше или равно second в зависимости от имени метода. Если нет, тест не пройден.

  • assertRegexpMatches (text, regexp, msg = None)

    Проверьте, что поиск по регулярному выражению соответствует тексту. В случае сбоя в сообщении об ошибке будет указан шаблон и текст. regexp может быть объектом регулярного выражения или строкой, содержащей регулярное выражение, подходящее для использования re.search () .

  • assertNotRegexpMatches (текст, регулярное выражение, сообщение = нет)

    Проверяет, что поиск по регулярному выражению не соответствует тексту . Сбой с сообщением об ошибке, включая шаблон и часть текста, которая соответствует. regexp может быть объектом регулярного выражения или строкой, содержащей регулярное выражение, подходящее для использования re.search () .

assertAlmostEqual (первый, второй, мест = 7, сообщения = нет, дельта = нет)

Проверьте, что первое и второе приблизительно (или не приблизительно) равны, вычисляя разницу, округляя до заданного числа десятичных знаков (по умолчанию 7),

assertNotAlmostEqual (первое, второе, места, сообщения, дельта)

Проверьте, что первое и второе не приблизительно равны, вычислив разницу, округлив до заданного числа десятичных знаков (по умолчанию 7) и сравнив с нулем.

В обеих вышеупомянутых функциях, если вместо мест указывается дельта, то разница между первым и вторым должна быть меньше или равна (или больше) дельте.

Предоставление и дельты, и мест вызывает ошибку TypeError.

assertGreater (первый, второй, сообщения = нет)

Проверьте, что first больше второго, в зависимости от имени метода. Если нет, тест не пройден.

assertGreaterEqual (первый, второй, сообщение = нет)

Проверьте, что first больше или равно second, в зависимости от имени метода. Если нет, тест не пройден

assertLess (первое, второе, сообщение = нет)

Проверьте, что первое меньше второго, в зависимости от имени метода. Если нет, тест не пройден

assertLessEqual (first, second, msg = None)

Проверьте, что first меньше или равно second в зависимости от имени метода. Если нет, тест не пройден.

assertRegexpMatches (text, regexp, msg = None)

Проверьте, что поиск по регулярному выражению соответствует тексту. В случае сбоя в сообщении об ошибке будет указан шаблон и текст. regexp может быть объектом регулярного выражения или строкой, содержащей регулярное выражение, подходящее для использования re.search () .

assertNotRegexpMatches (текст, регулярное выражение, сообщение = нет)

Проверяет, что поиск по регулярному выражению не соответствует тексту . Сбой с сообщением об ошибке, включая шаблон и часть текста, которая соответствует. regexp может быть объектом регулярного выражения или строкой, содержащей регулярное выражение, подходящее для использования re.search () .

Функции утверждения реализованы в следующем примере:

Live Demo

import unittest
import math
import re

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertAlmostEqual(22.0/7,3.14)
   def test2(self):
      self.assertNotAlmostEqual(10.0/3,3)
   def test3(self):
      self.assertGreater(math.pi,3)
   def test4(self):
      self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")

if __name__ == '__main__':
   unittest.main()

Приведенный выше скрипт сообщает о test1 и test4 как о сбое. В тесте 1 деление 22/7 находится не в 7 десятичных разрядах от 3,14. Точно так же, поскольку второй аргумент совпадает с текстом в первом аргументе, test4 приводит к AssertionError.

=====================================================FAIL: test1 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 7, in test1
      self.assertAlmostEqual(22.0/7,3.14)
AssertionError: 3.142857142857143 != 3.14 within 7 places
================================================================
FAIL: test4 (__main__.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "asserttest.py", line 13, in test4
      self.assertNotRegexpMatches("Tutorials Point (I) Private Limited","Point")
AssertionError: Regexp matched: 'Point' matches 'Point' in 'Tutorials Point (I)
Private Limited'
----------------------------------------------------------------------

Ran 4 tests in 0.001s                                                             
                                                                                  
FAILED (failures = 2)

Отстаивать для коллекций

Этот набор функций assert предназначен для использования с типами данных коллекции в Python, такими как List, Tuple, Dictionary и Set.

Sr.No. Метод и описание
1

assertListEqual (list1, list2, msg = None)

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

2

assertTupleEqual (tuple1, tuple2, msg = None)

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

3

assertSetEqual (set1, set2, msg = None)

Проверяет, что два набора равны. Если нет, создается сообщение об ошибке, в котором перечислены различия между наборами.

4

assertDictEqual (ожидаемый, фактический, msg = Нет)

Проверьте, что два словаря равны. Если нет, то создается сообщение об ошибке, которое показывает различия в словарях.

assertListEqual (list1, list2, msg = None)

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

assertTupleEqual (tuple1, tuple2, msg = None)

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

assertSetEqual (set1, set2, msg = None)

Проверяет, что два набора равны. Если нет, создается сообщение об ошибке, в котором перечислены различия между наборами.

assertDictEqual (ожидаемый, фактический, msg = Нет)

Проверьте, что два словаря равны. Если нет, то создается сообщение об ошибке, которое показывает различия в словарях.

Следующий пример реализует вышеуказанные методы —

Live Demo

import unittest

class SimpleTest(unittest.TestCase):
   def test1(self):
      self.assertListEqual([2,3,4], [1,2,3,4,5])
   def test2(self):
      self.assertTupleEqual((1*2,2*2,3*2), (2,4,6))
   def test3(self):
      self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})

if __name__ == '__main__':
   unittest.main()

В приведенном выше примере test1 и test3 показывают AssertionError. Сообщение об ошибке отображает различия в объектах List и Dictionary.