Что такое метод 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(), чтобы проверить, ссылаются ли две целочисленные переменные на один и тот же объект. Поскольку их значения одинаковы, они ссылаются на один и тот же объект.
