Функция AssertIs() модуля unittest в Python
Что такое метод AssertIs() в Python?
Функция AssertIs() модуля unittest в Python позволяет вам проверить, являются ли два объекта одинаковыми. Ниже показан синтаксис метода AssertIs():
assertIs(first, second, msg=None)
Если первая и вторая ссылки ссылаются на один и тот же объект, тест будет пройден. В противном случае — потерпит неудачу.
msg не является обязательным. Он отображается в результатах теста на случай, если тест не пройден.
Технически, метод AssertIs() использует оператор is:
first is second
Пример с AssertIs() в Python
- Сначала создайте одноэлементный класс Logger в модуле logger.py:
from datetime import datetime class Logger: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(Logger, cls).__new__(cls) return cls._instance def log(self, message): print(f'{datetime.now().strftime("%Y-%m-%d %H:%M:%S")} {message}')
Синглтон — это шаблон проектирования, который ограничивает создание экземпляра класса одним экземпляром. Другими словами, у вас будет один и тот же объект Logger независимо от того, сколько раз вы вызываете конструктор Logger().
- Во-вторых, создайте класс TestLogger, который тестирует класс Logger:
import unittest from logger import Logger class TestLogger(unittest.TestCase): def setUp(self): self.logger = Logger() def test_singleton(self): new_logger = Logger() self.assertIs(self.logger, new_logger)
В классе TestLogger:
- Сначала создайте новый экземпляр класса Logger в методе setUp() и присвойте его переменной экземпляра self.logger.
- Во-вторых, создайте новый экземпляр класса Logger и используйте метод AssertIs(), чтобы проверить, совпадают ли два экземпляра.
Если вы запустите тест:
python -m unittest -v
вы получите следующий результат:
test_singleton(test_logger.TestLogger) ... ok ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
Тест пройден.
Метод AssertIsNot() в Python
AssertIsNot() проверяет, не совпадает ли первый объект со вторым:
assertIsNot(first, second, msg=None)
Например:
import unittest class TestInteger(unittest.TestCase): def test_integer_different_value(self): x = 10 y = 20 self.assertIsNot(x, y) def test_integer_same_value(self): x = 10 y = 10 self.assertIs(x, y)
Запустите тест:
python -m unittest -v
Выход:
test_integer_different_value(test_integer.TestInteger) ... ok test_integer_same_value(test_integer.TestInteger) ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK
В этом примере мы используем метод AssertIsNot(), чтобы проверить, ссылаются ли две целочисленные переменные на разные объекты. Поскольку их значения различны, они ссылаются на разные объекты.
Во втором тестовом примере мы используем метод AssertIs(), чтобы проверить, ссылаются ли две целочисленные переменные на один и тот же объект. Поскольку их значения одинаковы, они ссылаются на один и тот же объект.