assert
для проверки, что условие истинно. Если условие ложно, assert
вызовет исключение AssertionError
, что приведет к провалу теста. Например:
assert 2 + 2 == 4, "Сложение работает неправильно"
Сообщение после запятой ("Сложение работает неправильно"
) необязательно, но полезно для понимания, какое именно условие не выполнилось.
Использование assert
в Python для проверки условий в тестах - это ключевая практика написания эффективных и надежных тестов. assert
- это встроенная инструкция (statement), которая проверяет истинность некоторого условия. Если условие истинно, ничего не происходит, и выполнение программы продолжается. Если условие ложно, возникает исключение AssertionError
, которое, как правило, останавливает выполнение теста и сообщает о неудаче.
Основные способы использования assert
:
assert result == expected_value, "Сообщение об ошибке, если проверка не прошла"
Если result
не равно expected_value
, будет выброшено AssertionError
с указанным сообщением.
assert result != unexpected_value, "Сообщение об ошибке"
True
или False
.
assert condition is True, "Сообщение об ошибке"
assert condition is False, "Сообщение об ошибке"
assert item in my_list, "Сообщение об ошибке"
assert item not in my_list, "Сообщение об ошибке"
assert isinstance(my_variable, int), "Сообщение об ошибке"
pytest.raises
(или аналогичным в других фреймворках) для проверки, что определенная функция выбрасывает ожидаемое исключение. Пример (с использованием pytest
, так как чистый `assert` сам по себе не может проверить возникновение исключения напрямую):
import pytest
def my_function(x):
if x < 0:
raise ValueError("x must be non-negative")
return x
def test_my_function_raises_value_error():
with pytest.raises(ValueError) as excinfo:
my_function(-1)
assert "x must be non-negative" in str(excinfo.value)
Важные моменты:
assert
. Это сообщение поможет понять, что именно пошло не так, когда тест провалится.
pdb
или встроенный отладчик IDE). Альтернативно, можно временно добавить print
statements для вывода значений переменных.
assert
не предназначены для обработки ошибок в production-коде. Их не следует использовать вместо try...except
блоков. assert
можно отключить глобально, передав флаг -O
(оптимизация) интерпретатору Python, поэтому они не являются надежным способом предотвратить ошибки в production.
assert
прекрасно работает с фреймворками для тестирования, такими как pytest
и unittest
. Фреймворки предоставляют дополнительные возможности, такие как обнаружение тестов, запуск тестов, сбор статистики и генерация отчетов. Они также часто предоставляют альтернативные методы проверки, которые могут быть более выразительными или предоставлять более подробную информацию об ошибках.
pytest
:
# pytest example
def test_addition():
assert 2 + 2 == 4
assert 2 + 2 != 5, "Addition is broken!"
def test_string_contains():
my_string = "hello world"
assert "world" in my_string
def test_list_length():
my_list = [1, 2, 3]
assert len(my_list) == 3
def test_type():
value = 10
assert isinstance(value, int)
assert not isinstance(value, str)
В заключение, assert
- это простой, но мощный инструмент для проверки условий в тестах Python. Используйте их для обеспечения корректности вашего кода и для быстрого выявления ошибок.